在Windows中运行。
以下代码正常。设置代理时,我没有指定用户名和密码。
$aContext = array(
'http' => array(
'proxy' => 'tcp://ip:port',
'request_fulluri' => true,
),
);
$cxContext = stream_context_create($aContext);
echo file_get_contents("someurl", False, $cxContext);
但是,当我尝试此代码时,除非我指定代理的用户名和密码,否则它将无效。
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_setopt($ch, CURLOPT_PROXY, 'http://ip:port');
curl_setopt($ch, CURLOPT_URL, "someurl");
$responseBody = curl_exec($ch);
我收到HTTP 407错误(在CONNECT之后从代理收到HTTP代码407),除非我指定http://domain\user:password@ip:port
如何在不指定用户和密码的情况下使cURL工作的任何想法(如file_get_contents那样)?
答案 0 :(得分:2)
您可以使用CURLOPT_PROXY
和CURLOPT_PROXYPORT
选项:
curl_setopt($ch, CURLOPT_PROXY, "123.123.123.123");
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
您的问题尚不清楚,但如果您需要使用用户名和密码对此代理进行身份验证,则可以使用CURLOPT_PROXYUSERPWD
选项指定您的用户名和密码以及CURLOPT_PROXYAUTH
选项指定您的身份验证方法:
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:password");
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); //HTTP Basic auth
此外,根据您使用的代理类型,您可能需要在CURLOPT_PROXY
设置中指定类型,或通过CURLOPT_PROXYTYPE
单独指定。
<强>文档强>