web-dev-qa-db-fra.com

Comment utiliser CURL via un proxy?

Je cherche à définir curl pour utiliser un serveur proxy. L'URL est fourni par un formulaire HTML, ce qui n'a pas posé de problème. Sans le proxy cela fonctionne bien. J'ai trouvé du code sur ce site et d'autres sites, mais ils ne fonctionnent pas. Toute aide pour trouver la bonne solution serait très appréciée. J'ai l'impression que les soufflets sont proches, mais qu'il me manque quelque chose. Merci.

Le code ci-dessous, je l’ai adapté à partir d’ici http://www.webmasterworld.com/forum88/10572.htm mais renvoie un message d’erreur concernant un T_VARIABLE manquant à la ligne 12.

<?

$url = '$_POST[1]';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1)
curl_exec ($ch); 
$curl_info = curl_getinfo($ch);
curl_close($ch);
echo '<br />';
print_r($curl_info);
?>

Le beuglement vient de curl par procuration ne renvoie aucun conten

<?

$proxy = "66.96.200.39:80";
$proxy = explode(':', $proxy);
$url = "$_POST[1]";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
curl_setopt($ch, CURLOPT_HEADER, 1);

$exec = curl_exec($ch);

echo curl_error($ch);
print_r(curl_getinfo($ch));
echo $exec;
?>

est actuellement en direct sur pelican-cement.com mais ne fonctionne pas non plus.

MISE À JOUR: Merci pour toute votre aide, j'ai apporté les modifications ci-dessus. Maintenant, il ne retourne qu'un écran vide.

<?

$url = $_POST['1'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_exec ($ch); 
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;
?> 
117
user586011

Voici une version de travail avec vos bugs supprimés.

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888';
//$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;

J'ai ajouté CURLOPT_PROXYUSERPWD au cas où l'un de vos mandataires aurait besoin d'un nom d'utilisateur et d'un mot de passe. Je règle CURLOPT_RETURNTRANSFER sur 1 pour que les données soient renvoyées dans la variable $curl_scraped_page.

J'ai enlevé un deuxième extra curl_exec($ch); qui empêcherait le retour de la variable. J'ai consolidé votre adresse IP et votre port proxy en un seul paramètre.

J'ai aussi supprimé CURLOPT_HTTPPROXYTUNNEL et CURLOPT_CUSTOMREQUEST car c'était la valeur par défaut.

Si vous ne voulez pas que les en-têtes soient retournés, mettez en commentaire CURLOPT_HEADER.

Pour désactiver le proxy, il suffit de le définir sur null.

curl_setopt($ch, CURLOPT_PROXY, null);

Si vous avez des questions, n'hésitez pas, je travaille avec cURL tous les jours.

211
GravyCode

J'ai expliqué l'utilisation de diverses options CURL requises pour CURL PROXY.

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888';
$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);         // URL for CURL call
curl_setopt($ch, CURLOPT_PROXY, $proxy);     // PROXY details with port
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);   // Use if proxy have username and password
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // If expected to call with specific PROXY type
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  // If url has redirects then go to the final redirected URL.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  // Do not outputting it out directly on screen.
curl_setopt($ch, CURLOPT_HEADER, 1);   // If you want Header information of response else make 0
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;
29
Somnath Muluk