google - ¿Cómo tener PHP para usar Proxy Setting para conectarse a internet?
proxy para google chrome (8)
¡Si es posible!
Puede configurar stream_context_set_default
en un archivo e incluir este archivo en todo su programa Php, utilizando la propiedad auto_prepend_file
php.ini.
Escribí una pequeña idea sobre:
https://gist.github.com/ebuildy/381f116e9cd18216a69188ce0230708d
Y un artículo en francés:
Esta técnica es "genial" porque le permite a su administrador del sistema configurar el host, por lo que el desarrollador no tiene que cambiar nada en el código.
Estoy detrás de un servidor proxy que no permite una conexión directa a Internet. Todas mis aplicaciones PHP no se conectan a Internet para sus comprobaciones de actualización, etc.
¿Cómo puedo decirle a PHP mi Proxy Settings?
No quiero ingresar la configuración de proxy en el código, quiero que PHP lo use a través de una configuración global o algo similar.
Busqué en Internet y no pude encontrar nada acerca de stream_context_set_default () con un servidor proxy protegido por contraseña .
Entonces pensé que la contraseña en la autorización básica se envía en los encabezados. ¡Así que modifiqué los encabezados con la contraseña extraída de una solicitud CURL y funcionó perfecto!
Así es como lo haces:
Primero envíe esta solicitud a cualquier dominio (example.com) como se muestra a continuación:
curl -v -U user:pass -x your_proxy_ip:port --url https://example.com
Vea los encabezados de enrollamiento enviados y obtuve estas líneas proxy para usarlas más adelante:
> 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 ahora es el momento de construir nuestro encabezado personalizado:
$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));
Y funciona perfectamente, ¡obtienes la IP de tu servidor proxy como respuesta!
Código de muestra:
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");
Esto depende de cómo su aplicación PHP se conecta a internet.
Si tomas la situación más probable usando PHP cUrl. En ese caso las siguientes opciones te ayudarán:
curl_setopt($handle, CURLOPT_PROXY, $proxy_url);
curl_setopt($handle, CURLOPT_PROXYUSERPWD, "[username]:[password]");
Véase también: http://www.php.net/manual/en/function.curl-setopt.php
Para Drupal puede establecer la configuración de proxy en su archivo settings.php.
$conf[''proxy_server'']
y así sucesivamente.
Más detalles here
Para algunos scripts, todo lo que tiene que hacer es configurar la variable de entorno HTTP_PROXY
. Ese fue el caso de los scripts de mantenimiento / update.php
composer.phar
y media-wiki.
P.ej:
setenv HTTP_PROXY http://1.2.3.4:3934
Si su proxy está en 1.2.3.4 escuchando en el puerto 3934. Trabajó para mí.
Si casi todos ustedes tienen acceso a Internet necesitan un proxy, preferiría hacer esto.
//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'']]);
el proxy funcionará para file_get_contents
pero no curl_exec
Yo uso el módulo PEAR HTTP_Request2 .
Aquí hay una versión simplificada de mi función UrlOpen ():
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();