Php 文件\u获取\u代理背后的内容?
在工作中,我们必须使用代理基本上访问端口80。例如,我们为每个用户提供了自己的自定义登录 我的临时解决方法是使用curl通过代理以我自己的身份登录,并访问我需要的外部数据 我是否可以设置某种高级php设置,以便在内部,每当它试图调用类似Php 文件\u获取\u代理背后的内容?,php,proxy,Php,Proxy,在工作中,我们必须使用代理基本上访问端口80。例如,我们为每个用户提供了自己的自定义登录 我的临时解决方法是使用curl通过代理以我自己的身份登录,并访问我需要的外部数据 我是否可以设置某种高级php设置,以便在内部,每当它试图调用类似file\u get\u contents()之类的内容时,总是通过代理?我使用的是Windows ATM,所以如果这是唯一的方法,重新编译会很痛苦 我的解决方案之所以是临时性的,是因为我需要一个通用的解决方案,该解决方案适用于多个用户,而不是使用一个用户的凭据(
file\u get\u contents()
之类的内容时,总是通过代理?我使用的是Windows ATM,所以如果这是唯一的方法,重新编译会很痛苦
我的解决方案之所以是临时性的,是因为我需要一个通用的解决方案,该解决方案适用于多个用户,而不是使用一个用户的凭据(我曾考虑单独请求一个用户帐户来完成这项工作,但密码经常更改,需要在十几个或更多的站点中部署该技术)。我不想硬编码凭据来使用curl解决方案。这取决于代理登录的工作方式,可能会对您有所帮助
$context = stream_context_set_default(
array(
'http'=>array(
'header'=>'Authorization: Basic ' . base64_encode('username'.':'.'userpass')
)
)
);
$result = file_get_contents('http://..../...');
要通过/通过不需要身份验证的代理使用,应执行以下操作:
(我无法测试此代理:我的代理需要身份验证)
当然,用适合您的IP和端口替换我的代理;-)
如果您遇到这种错误:
Warning: file_get_contents(http://www.google.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 407 Proxy Authentication Required
这意味着您的代理需要身份验证
如果代理需要身份验证,则必须添加几行,如下所示:
$auth = base64_encode('LOGIN:PASSWORD');
$aContext = array(
'http' => array(
'proxy' => 'tcp://192.168.0.2:3128',
'request_fulluri' => true,
'header' => "Proxy-Authorization: Basic $auth",
),
);
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents("http://www.google.com", False, $cxContext);
echo $sFile;
关于IP和端口,这一次还有登录名和密码;-)检查所有有效的
现在,您将向代理传递一个头部,其中包含您的登录名和密码
而且。。。应显示该页面;-) 这里有一个类似的帖子:它解释了如何做
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;
}
使用
stream\u context\u set\u default
函数。它更易于使用,因为您可以直接使用file_get_contents或类似函数,而无需传递任何附加参数
这说明了如何使用它。这是该页面的代码
<?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);
?>
Martin,我有一个代理自动配置(pac)文件,而不是单一的代理服务器。它还需要NTLM身份验证。你能帮我一下吗?我遇到了以下错误:无法打开流:找不到套接字传输“http”-你在配置PHP时忘记启用它了吗?我正在使用PHP5.5/Apache2.4,并启用了curl。非常感谢。通常,cURL满足了我的要求,但我正在试验Appengine PHP,并且没有cURL laode,因此带有流上下文的文件\u get\u内容救了我:D@codeomnitrix,可能有点晚,但我也遇到了同样的问题,我将pac文件的url粘贴到浏览器中,在该文件中我可以找到代理IP地址。对于任何人来说:在我的情况下,使用tcp
作为协议也是必要的。在我使用http
之前,是什么给了我错误:无法打开流:找不到套接字传输“http”-您在配置PHP时忘记启用它了吗?
<?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);
?>