2015-04-28 41 views
3

我在我的PHP代碼中遇到cURL請求的奇怪行爲。 我在標準的WAMP Apache服務器上本地運行代碼。 下面的代碼:在PHP腳本中cURL請求的奇怪行爲

$auth_info = "..."; 
$some_url = "..."; 
$channel = curl_init(); 
curl_setopt($channel, CURLOPT_URL, $some_url); 
curl_setopt($channel, CURLOPT_HTTPHEADER, 
    array("Authorization: BASIC " . base64_encode($auth_info)) 
); 
curl_setopt($channel, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($channel, CURLOPT_HEADER, true); 
$response = curl_exec($channel); 
var_dump(curl_getinfo($channel)); 
$header_size = curl_getinfo($channel, CURLINFO_HEADER_SIZE); 
$header = substr($response, 0, $header_size); 
$body = substr($response, $header_size); 
var_dump($header); 
var_dump($body); 
curl_close($channel); 

如果我通過我的CLI執行這個小PHP代碼片段(PowerShell的,因爲我在Windows上運行),一切都很好,所有var_dumps工作,我可以看到$ he​​ader和$ body以及我所期望的所有內容和數據實際上都存在。

現在爲奇怪的行爲。如果我在任何瀏覽器上面的代碼中打開腳本文件,它只是給我:

array (size=26) 
'url' => string 'the_url_here' (length=39) 
'content_type' => null 
'http_code' => int 0 
'header_size' => int 0 
'request_size' => int 0 
'filetime' => int -1 
'ssl_verify_result' => int 0 
'redirect_count' => int 0 
'total_time' => float 1.234 
'namelookup_time' => float 0 
'connect_time' => float 0.109 
'pretransfer_time' => float 0 
'size_upload' => float 0 
'size_download' => float 0 
'speed_download' => float 0 
'speed_upload' => float 0 
'download_content_length' => float -1 
'upload_content_length' => float -1 
'starttransfer_time' => float 0 
'redirect_time' => float 0 
'redirect_url' => string '' (length=0) 
'primary_ip' => string 'here_is_the_ip' (length=12) 
'certinfo' => 
    array (size=0) 
    empty 
'primary_port' => int 443 
'local_ip' => string 'here_is_my_ip' (length=13) 
'local_port' => int -> my_local_port_here 
boolean false 
boolean false 

我完全摸不着頭腦,因爲我不能看到腳本之間的差異與否有關的CLI開始, beeing由瀏覽器啓動。有沒有人有這個想法?

編輯注:如果我使用Guzzle作爲請求,在CLI和瀏覽器中都可以正常工作。我仍然對cURL在這裏引起問題的答案感興趣。

+0

也許你需要一個正確的URL來運行測試? – Filype

+0

我懷疑你的CLI和WAMP指向不同的PHP安裝。使用'php_info()'寫一個快速頁面,並查看php可執行文件所在的位置。 –

+0

我無法找到任何php_info()輸出中的php.exe的直接路徑,但我可以確認,該瀏覽器和CLI對於「加載的配置文件」具有不同的值。這可能已經是它了。 – plocks

回答

1

您是否嘗試過記錄Curl請求的詳細輸出?

通常情況下,我覺得這個要弄清楚什麼是引擎蓋下事情的最好方法...... https://stackoverflow.com/a/14436877/682754

也不像以前那樣受歡迎,但這種方法看起來簡單的實現,是有很多清潔... https://stackoverflow.com/a/26611776/682754

+1

你說得對。仔細調試請求會導致出現此錯誤:「SSL證書問題:證書鏈中的自簽名證書」。使用這裏提出的任一解決方案:http://stackoverflow.com/questions/6400300/https-and-ssl3-get-server-certificatecertificate-verify-failed-ca-is-ok可以幫助繞過這個問題。 我會接受你的答案,因爲它實際上指向我的解決方案,即使它是間接的;-) – plocks

+1

很高興聽到你找到解決方案,證書也是我的許多捲曲問題的原因 – Carlton