Comment utiliser CURL via un proxy?

je cherche à configurer curl pour utiliser un serveur proxy. L'url est fournie par un formulaire html, qui n'a pas été un problème. Sans la procuration ça marche très bien. J'ai trouvé du code sur ce site et d'autres, mais ils ne fonctionnent pas. Toute aide à trouver une bonne solution serait très apprécié. J'ai l'impression que les cloches sont proches, mais que je manque quelque chose. remercier.

le code ci-dessous que j'ai adapté d'ici http://www.webmasterworld.com/forum88/10572.htm mais il renvoie un message d'erreur à propos d'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 soufflet est de roulage par procuration ne retourne aucun contenu

<?

$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 ça ne marche pas non plus.

mise à jour: Merci à tous pour votre aide, j'ai fait les modifications ci-dessus. Maintenant, il retourne seulement un écran blanc.

<?

$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;
?> 
104
demandé sur Community 2011-03-06 19:54:01

3 réponses

Voici une version de travail avec vos bogues 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. J'ai placé CURLOPT_RETURNTRANSFER à 1, de sorte que les données seront retournées à la variable $curl_scraped_page .

j'ai supprimé un second curl_exec($ch); qui empêcherait le retour de la variable. J'ai consolidé L'IP et le port de votre mandataire en un seul paramètre.

j'ai aussi supprimé CURLOPT_HTTPPROXYTUNNEL et CURLOPT_CUSTOMREQUEST comme par défaut.

si vous ne voulez pas que les en-têtes soient retournés, commentez CURLOPT_HEADER .

pour désactiver le proxy, il suffit de le définir à null.

curl_setopt($ch, CURLOPT_PROXY, null);

toutes les questions n'hésitez pas à poser, je travaille avec cURL tous les jours.

194
répondu GravyCode 2014-12-03 10:00:19

j'ai expliqué l'utilisation de diverses options CURL requis pour le PROXY CURL.

$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;
23
répondu Somnath Muluk 2015-12-07 13:24:52

Voici une fonction bien testée que j'ai utilisée pour mes projets avec des commentaires explicatifs détaillés


il y a plusieurs fois où les ports autres que 80 sont bloqués par le pare-feu du serveur de sorte que le code semble fonctionner correctement sur localhost mais pas sur le serveur

function get_page($url){

global $proxy;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_HEADER, 0); // return headers 0 no 1 yes
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return page 1:yes
curl_setopt($ch, CURLOPT_TIMEOUT, 200); // http request timeout 20 seconds
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow redirects, need this if the url changes
curl_setopt($ch, CURLOPT_MAXREDIRS, 2); //if http server gives redirection responce
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); // cookies storage / here the changes have been made
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // false for https
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // the page encoding

$data = curl_exec($ch); // execute the http request
curl_close($ch); // close the connection
return $data;
}
-1
répondu hammad1238 2013-10-21 06:49:13