it-swarm.com.de

Wie zu haben PHP Proxy-Einstellung verwenden, um eine Verbindung zum Internet herzustellen?

Ich stehe hinter einem Proxy-Server, der keine direkte Verbindung zum Internet erlaubt. Alle meine PHP - Anwendungen können keine Verbindung zum Internet herstellen, um Updates zu überprüfen usw.

Wie erfahre ich PHP meine Proxy-Einstellungen?

Ich möchte keine Proxy-Einstellungen in den Code eingeben, ich möchte PHP selbst über eine globale Konfigurationseinstellung oder ähnliches verwenden.

23
Alexar

wenn fast alle von Ihnen einen Internetzugang benötigen, würde ich dies lieber tun.

//add this as the first line of the entry file may it is the index.php or config.php
stream_context_set_default(['http'=>['proxy'=>'proxy-Host:proxy-port']]);

der Proxy funktioniert für file_get_contents, aber nicht für curl_exec

hier ist ein offizielles Dokument.

13
Ian Hu

Dies hängt davon ab, wie Ihre PHP - Anwendung eine Verbindung zum Internet herstellt. 

Wenn Sie die wahrscheinlichste Situation mit PHP cUrl verwenden. In diesem Fall helfen Ihnen die folgenden Optionen: 

curl_setopt($handle, CURLOPT_PROXY, $proxy_url); 
curl_setopt($handle, CURLOPT_PROXYUSERPWD, "[username]:[password]"); 

Siehe auch: http://www.php.net/manual/de/function.curl-setopt.php

7
Tramov

Beispielcode:

function getUrl($url)
{
    $ch = curl_init(); 
    $timeout = 5; // set to zero for no timeout 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_PROXY, "http://proxy.example.com"); //your proxy url
    curl_setopt($ch, CURLOPT_PROXYPORT, "8080"); // your proxy port number 
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:pass"); //username:pass 
    $file_contents = curl_exec($ch); 
    curl_close($ch); 
    return $file_contents;
}

echo  getUrl("http://www.google.com");
6
Evan Lee

Ich verwende das Modul PEAR HTTP_Request2 .

Hier ist eine vereinfachte Version meiner UrlOpen () - Funktion:

function UrlOpen($url)
{
  $request = new HTTP_Request2($url);

  $request->setConfig(array(
    'proxy_Host' => '192.168.1.6',
    'proxy_port' => 8080,
    'proxy_user' => 'MYUSER',
    'proxy_password' => 'MYPASS',
    'ssl_verify_peer' => False,
    'connect_timeout' => 3,
  );

  return $request;
}

$req = UrlOpen($url);
$res = $req->send();
if ($res->getStatus() == '200')
  $data = $request->getBody();
1
Martin Tournoij

Ja es ist möglich!

Sie können stream_context_set_default in einer Datei konfigurieren und diese Datei in Ihr gesamtes PHP-Programm einschließen, indem Sie die auto_prepend_file php.ini -Eigenschaft verwenden.

Ich schrieb einen kleinen Gist über:

https://Gist.github.com/ebuildy/381f116e9cd18216a69188ce0230708d

Und ein Artikel auf Französisch:

https://medium.com/@thomasdecaux/param%C3%A9trer-par-d%C3%A9faut-un-proxy-pour-php-file-get-content-3e9a32416979#.6zbg605cx

Diese Technik ist "cool", da Ihr sys-admin den Host so konfigurieren kann, dass der Entwickler nichts am Code ändern muss.

1
Thomas Decaux

Für einige Skripts müssen Sie lediglich die Umgebungsvariable HTTP_PROXY setzen. Dies war sowohl für composer.phar als auch für die Maintenance/update.php-Skripts von media-wiki der Fall.

Z.B.:

setenv HTTP_PROXY http://1.2.3.4:3934

Wenn Ihr Proxy sich bei 1.2.3.4 befindet, hören Sie Port 3934. Hat für mich gearbeitet.

0
rustycar

Ich habe über das Internet gesucht und konnte nichts über stream_context_set_default () mit einemkennwortgeschütztenproxy-Server finden.

Dann dachte ich, dass das Passwort in der Basisauthentifizierung in den Kopfzeilen gesendet wird ..__ Also habe ich die Header mit dem aus einer CURL-Anfrage extrahierten Passwort geändert und es hat perfekt funktioniert !!!

So machst du es:

Schicken Sie diese Anfrage zunächst an eine beliebige Domäne (example.com) wie folgt:

curl -v -U user:pass -x your_proxy_ip:port --url https://example.com

Sehen Sie sich die gesendeten Curl-Header an, und ich habe diese Proxy-Zeilen zur späteren Verwendung erhalten:

>   Trying XXX.XXX.XXX.XXX...
> Connected to XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX) port YYYY (#0)
> Establish HTTP proxy tunnel to example.com:443
> Proxy auth using Basic with user 'your_username_here'
> CONNECT example.com:443 HTTP/1.1
> Host: example.com:443
> Proxy-Authorization: Basic YW1hem9uOnXXXXXXXXXXXXXXX25SMg
> User-Agent: curl/7.47.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
< Proxy replied OK to CONNECT request

OK, jetzt ist es an der Zeit, unseren benutzerdefinierten Header zu erstellen:

$default_opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Proxy-Authorization: Basic YW1hem9uOnXXXXXXXXXXXXXXX25SMg\r\n" .
              "Proxy-Connection: Keep-Alive",
    'proxy'=>"XXX.XXX.XXX.XXX:YYYY"
  )
);

$default = stream_context_set_default($default_opts);


$result = file_get_contents("https://ipleak.net/json/");
print_r(json_decode($result));

Und es funktioniert perfekt, Sie erhalten als Antwort die IP-Adresse Ihres Proxy-Servers!

0
Tarik

Für Drupal können Sie die Proxy-Konfiguration in Ihrer Datei settings.php einstellen.

$conf['proxy_server'] und so weiter.

Weitere Details hier

0
Jokerius