使用代理时PHP cURL与file_get_contents

时间:2015-06-18 20:58:04

标签: php curl proxy file-get-contents

在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那样)?

1 个答案:

答案 0 :(得分:2)

您可以使用CURLOPT_PROXYCURLOPT_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单独指定。

<强>文档

http://php.net/manual/en/function.curl-setopt.php

http://curl.haxx.se/libcurl/c/curl_easy_setopt.html