2013-04-25 63 views
13

我有這段代碼與捲曲推出查詢:PHP捲曲:SSL_VERIFYPEER選項沒有效果

function curl_query($full_url, $username, $password, $payload) { 
    $additionalHeaders = ""; 
    $process = curl_init($full_url); 
    curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', $additionalHeaders)); 
    curl_setopt($process, CURLOPT_HEADER, 0); 
    curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password); 
    curl_setopt($process, CURLOPT_TIMEOUT, 30); 
    curl_setopt($process, CURLOPT_POST, 1); 
    curl_setopt($process, CURLOPT_POSTFIELDS, $payload); 
    curl_setopt($process, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($process, CURLOPT_MAXREDIRS, 4); 
    curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE); 
    $return = curl_exec($process); 
    if ($return === false) { 
     error_log("CURL error ".curl_error($process)); 
    } 
    return $return; 
} 

選項CURLOPT_SSL_VERIFYPEER設置爲false,這樣我可以閱讀使用自簽名頁證書。然而,當我對一個HTTPS URL執行該代碼我得到一個錯誤:

CURL error SSL: certificate subject name 'localhost' does not match target host name '192.168.1.1', 

我一個CentOS 5服務器安裝php53包上運行此代碼。

在此先感謝

回答

37

添加CURLOPT_SSL_VERIFYHOST

curl_setopt($process, CURLOPT_SSL_VERIFYHOST, FALSE); 

我認識的選項,該PHP文件的英文版缺少這個重要的信息:

(從德語版的翻譯PHP手冊)

CURLOPT_SSL_VERIFYHOST has to be set to true or false if CURLOPT_SSL_VERIFYPEER has been deactivated.

+0

它工作。非常感謝。 – facha 2013-04-25 16:41:24

+0

歡迎您! – hek2mgl 2013-04-25 16:43:16

+1

有多明顯。有'CURLOPT_SSL_VERIFYHOST' **和**'CURLOPT_SSL_VERIFYPEER'。我錯過了;這救了我。謝謝! – 2015-08-19 01:05:45