2015-06-18 97 views
0

在Windows中運行。使用代理時PHP cURL與file_get_contents

以下代碼正常工作。設置代理時,我沒有指定用戶名和密碼。

$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錯誤(收到的HTTP代碼407代理CONNECT之後),除非我指定http://domain\user:[email protected]:port

任何想法如何使捲曲工作不指定用戶名和密碼(如的file_get_contents一樣) ?

+0

當使用CURLOPT_PROXY試圖分裂IP和端口部分。 'curl_setopt($ ch,CURLOPT_PROXY,'X.X.X.X'); curl_setopt($ ch,CURLOPT_PROXYPORT,'XXXX');' – Bijan

+0

@Bijan分別指定url和端口時出現同樣的錯誤。剛剛嘗試過。 – thomas

回答

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

+0

剛剛嘗試過使用單獨指定的IP和端口,並收到相同的錯誤。 \t \t curl_setopt($ ch,CURLOPT_PROXY,'x.x.x.x'); \t \t curl_setopt($ ch,CURLOPT_PROXYPORT,'8080'); – thomas

+0

你在使用什麼樣的代理? –

+0

不是100%確定。 IT部門已經設置好了(會試圖找出答案)。我知道它跟蹤使用代理的用戶(我所做的是可以做的 - 只需要不必在cURL中硬編碼密碼)。幾乎感覺像file_get_contents從Windows拉用戶憑據並傳遞它們。 – thomas