Bei der Arbeit müssen wir einen Proxy verwenden, um grundsätzlich auf Port 80 zuzugreifen. Beispielsweise haben wir für jeden Benutzer unsere eigenen benutzerdefinierten Anmeldungen.
Meine vorübergehende Problemumgehung besteht darin, Curl zu verwenden, um mich über einen Proxy als mich selbst anzumelden und auf die externen Daten zuzugreifen, die ich benötige.
Gibt es eine Art erweiterte PHP-Einstellung, die ich so einstellen kann, dass intern immer dann, wenn versucht wird, so etwas aufzurufen, wie file_get_contents()
es immer über einen Proxy erfolgt? Ich bin am Windows-Geldautomaten, daher wäre es schwierig, ihn neu zu kompilieren, wenn dies der einzige Weg ist.
Der Grund, warum meine Problemumgehung nur vorübergehend ist, besteht darin, dass ich eine Lösung benötige, die generisch ist und für mehrere Benutzer funktioniert, anstatt die Anmeldeinformationen eines Benutzers zu verwenden (ich habe erwogen, ein separates Benutzerkonto nur zu diesem Zweck anzufordern, aber Kennwörter ändern sich häufig, und diese Technik muss in einem Zeitraum bereitgestellt werden Dutzend oder mehr Websites). Ich möchte Anmeldeinformationen nicht grundsätzlich fest codieren, um die Curl-Problemumgehung zu verwenden.
tcp
als Protokoll zu verwenden. Bevor ich das verwendete,http
was mir den Fehler gab: Fehler beim Öffnen des Streams: Der Socket-Transport "http" konnte nicht gefunden werden. Haben Sie vergessen, ihn zu aktivieren, als Sie PHP konfiguriert haben?Verwenden Sie
stream_context_set_default
Funktion. Die Verwendung ist viel einfacher, da Sie file_get_contents oder ähnliche Funktionen direkt verwenden können, ohne zusätzliche Parameter zu übergebenDieser Blog-Beitrag erklärt, wie man es benutzt. Hier ist der Code von dieser Seite.
<?php // Edit the four values below $PROXY_HOST = "proxy.example.com"; // Proxy server address $PROXY_PORT = "1234"; // Proxy server port $PROXY_USER = "LOGIN"; // Username $PROXY_PASS = "PASSWORD"; // Password // Username and Password are required only if your proxy server needs basic authentication $auth = base64_encode("$PROXY_USER:$PROXY_PASS"); stream_context_set_default( array( 'http' => array( 'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT", 'request_fulluri' => true, 'header' => "Proxy-Authorization: Basic $auth" // Remove the 'header' option if proxy authentication is not required ) ) ); $url = "http://www.pirob.com/"; print_r( get_headers($url) ); echo file_get_contents($url); ?>
quelle
Abhängig davon, wie die Proxy-Anmeldung funktioniert, kann Ihnen stream_context_set_default helfen.
$context = stream_context_set_default( array( 'http'=>array( 'header'=>'Authorization: Basic ' . base64_encode('username'.':'.'userpass') ) ) ); $result = file_get_contents('http://..../...');
quelle
Es gibt hier einen ähnlichen Beitrag: http://techpad.co.uk/content.php?sid=137, in dem erklärt wird, wie es geht.
function file_get_contents_proxy($url,$proxy){ // Create context stream $context_array = array('http'=>array('proxy'=>$proxy,'request_fulluri'=>true)); $context = stream_context_create($context_array); // Use context stream with file_get_contents $data = file_get_contents($url,false,$context); // Return data via proxy return $data; }
quelle