Wie benutzt man CURL über einen Proxy?
Ich möchte curl so einstellen, dass es einen Proxy-Server verwendet. Die URL wird von einem HTML-Formular bereitgestellt, was kein Problem darstellt. Ohne den Proxy funktioniert es gut. Ich habe auf dieser und anderen Seiten Code gefunden, aber sie funktionieren nicht. Für jede Hilfe bei der Suche nach der richtigen Lösung wäre ich sehr dankbar. Ich habe das Gefühl, dass die unten aufgeführten Lösungen nahe dran sind, aber dass ich etwas übersehe. Ich danke Ihnen.
Den folgenden Code habe ich von http://www.webmasterworld.com/forum88/10572.htm übernommen, aber er gibt eine Fehlermeldung über eine fehlende T_VARIABLE in Zeile 12 aus.
<?
$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);
?>
Der nachfolgende Code stammt von https://stackoverflow.com/questions/4802816/curl-through-proxy-returns-no-content
<?
$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;
?>
ist derzeit live auf pelican-cement.com, funktioniert aber auch nicht.
UPDATE: Vielen Dank für Ihre Hilfe, ich habe die oben genannten Änderungen vorgenommen. Jetzt wird nur noch ein leerer Bildschirm angezeigt.
<?
$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;
?>
Hier ist eine funktionierende Version, in der die Fehler beseitigt wurden.
Ich habe
CURLOPT_PROXYUSERPWD
hinzugefügt, falls einer Ihrer Proxies einen Benutzernamen und ein Passwort benötigt. Ich habeCURLOPT_RETURNTRANSFER
auf 1 gesetzt, so dass die Daten an die Variable$curl_scraped_page
zurückgegeben werden.Ich habe ein zweites zusätzliches
curl_exec($ch);
entfernt, das die Rückgabe der Variablen verhindern würde. Ich habe die IP und den Port des Proxys in einer Einstellung zusammengefasst.Ich habe auch
CURLOPT_HTTPPROXYTUNNEL
undCURLOPT_CUSTOMREQUEST
entfernt, da dies der Standard war.Wenn Sie die Header nicht zurückgeben wollen, kommentieren Sie
CURLOPT_HEADER
aus.Um den Proxy zu deaktivieren, setzen Sie ihn einfach auf null.
Wenn Sie Fragen haben, können Sie diese gerne stellen, ich arbeite jeden Tag mit
cURL
.Ich habe die Verwendung der verschiedenen CURL-Optionen erklärt, die für CURL PROXY erforderlich sind.
Hier ist eine gut getestete Funktion, die ich für meine Projekte verwendet habe, mit ausführlichen selbsterklärenden Kommentaren
Es kommt häufig vor, dass andere Ports als 80 von der Firewall des Servers blockiert werden, so dass der Code auf dem localhost gut zu funktionieren scheint, aber nicht auf dem Server