Ich möchte curl so einstellen, dass ein Proxyserver verwendet wird. Die URL wird von einem HTML-Formular bereitgestellt, was kein Problem war. Ohne den Proxy funktioniert es gut. Ich habe Code auf dieser und anderen Websites gefunden, aber sie funktionieren nicht. Jede Hilfe bei der Suche nach der richtigen Lösung wäre sehr dankbar. Ich habe das Gefühl, dass der Balg nahe ist, aber dass mir etwas fehlt. Danke.
Der folgende Code, den ich von hier aus angepasst habe, http://www.webmasterworld.com/forum88/10572.htm , gibt jedoch eine Fehlermeldung über ein fehlendes T_VARIABLE in Zeile 12 zurück.
<?
$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 Balg ist von Curl bis Proxy kein Inhalt zurückgegeben
<?
$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 all Ihre Hilfe. Ich habe die oben genannten Änderungen vorgenommen. Jetzt wird nur noch ein leerer Bildschirm zurückgegeben.
<?
$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;
?>
$_POST['1']
Antworten:
Hier ist eine funktionierende Version, bei der Ihre Fehler entfernt wurden.
Ich habe hinzugefügt,
CURLOPT_PROXYUSERPWD
falls einer Ihrer Proxies einen Benutzernamen und ein Passwort benötigt. Ich setzeCURLOPT_RETURNTRANSFER
auf 1, damit die Daten an die$curl_scraped_page
Variable zurückgegeben werden.Ich habe ein zweites Extra entfernt,
curl_exec($ch);
das die Rückgabe der Variablen verhindern würde. Ich habe Ihre Proxy-IP und Ihren Port in einer Einstellung zusammengefasst.Ich habe auch entfernt
CURLOPT_HTTPPROXYTUNNEL
undCURLOPT_CUSTOMREQUEST
da es die Standardeinstellung war.Wenn Sie nicht möchten, dass die Header zurückgegeben werden, kommentieren Sie dies aus
CURLOPT_HEADER
.Um den Proxy zu deaktivieren, setzen Sie ihn einfach auf null.
Bei Fragen stehe ich Ihnen gerne
cURL
jeden Tag zur Verfügung.quelle
Ich habe die Verwendung verschiedener CURL-Optionen erklärt, die für CURL PROXY erforderlich sind.
quelle
Hier ist eine gut getestete Funktion, die ich für meine Projekte mit detaillierten selbsterklärenden Kommentaren verwendet habe
Es gibt viele Fälle, in denen andere Ports als 80 von der Server-Firewall blockiert werden, sodass der Code auf localhost, jedoch nicht auf dem Server einwandfrei zu funktionieren scheint
quelle
/etc/ssl/certs
z. B. unter Debian / Ubuntu) anzugeben