2013-03-05 38 views
29

使用PHP & curl,我需要通過代理連接到SSL安全站點,並忽略證書警告。我的捲曲命令行看起來像這樣:php curl -k或--insecure,-X

curl -k -u username:password -X GET https://someURL 

翻閱curl.php,我看到我認爲是正確的選項設置。有了它們,我最終得到了如下結果:

$ch = curl_init("https://someURL"); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Ignore cert errors? 
    curl_setopt($ch, CURLOPT_PROXY, true);   // Proxy true? 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
    curl_setopt($ch, CURLOPT_USERPWD, "username:password");  
    $result = curl_exec($ch); 

但是,$ result總是返回false。我的密碼有一個特殊的字符,「!」。也許我需要逃避它?除此之外,還有其他想法嗎?

回答

51

要完全禁用ssl證書檢查curl知道選項CURLOPT_SSL_VERIFYPEER。如果它設置爲false,證書檢查將被禁用。由於默認值是true,你必須補充:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

PHP documentation

CURLOPT_SSL_VERIFYPEER FALSE從驗證對方的證書停止捲曲。可以使用CURLOPT_CAINFO選項指定要驗證的替代證書,也可以使用CURLOPT_CAPATH選項指定證書目錄。從cURL 7.10開始默認爲TRUE。從cURL 7.10開始安裝默認軟件包。

請注意,如果證書檢查被禁用,您可以省略CURLOPT_SSL_VERIFYHOST設置。所以,下面的行可以刪除:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

你還問,如果下面的設置就可以了:

curl_setopt($ch, CURLOPT_PROXY, true); 

PHP documentation

HTTP代理隧道請求通過。

表示如果您正在使用代理服務器,它接受代理地址如'192.168.0.1:3128'。 true在這種情況下是沒有意義的

+0

@DanielStenberg是的,這是正確的。我的帖子的代理相關部分只是回答:'//代理真實?'。 (再看看這個問題) – hek2mgl 2013-03-06 12:01:26

+0

確實,謝謝。我對答案感到困惑,並且與問題沒有很好的關聯。可能在答案中可以稍微澄清一點,讓像我這樣的傻子更難做出錯誤結論...... – 2013-03-06 14:48:06

+0

@DanielStenberg編輯答案 – hek2mgl 2013-03-06 15:57:23