2011-05-18 36 views
1

所以我在這裏和其他地方發現了很多關於PHP,cURL和SSL的interwebs的帖子。我有一個問題,我沒有看到。cURL上的新自旋不能通過SSL工作

很明顯,如果我設置SSL_VERIFYPEER/HOST來盲目接受我可以得到這個工作,但我想用我的證書來驗證連接。

因此,這裏是一些代碼:

 $options = array(
      CURLOPT_URL => $oAuthResult['signed_url'], 
      CURLOPT_RETURNTRANSFER => TRUE, 
      CURLOPT_HEADER => 0, 
      CURLOPT_SSL_VERIFYPEER => TRUE, 
      CURLOPT_SSL_VERIFYHOST => 2, 
      CURLOPT_CAINFO => getcwd() . '\application\third_party\certs\rootCerr.crt' 

     ); 
     curl_setopt_array($ch, $options); 
    try { 
     $result = curl_exec($ch); 
     $errCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
     if (curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) { 
      throw new Exception('<strong>Error trying to ExecuteWebRequest, returned: '.$errCode .'<br>URL:'.$url . '<br>POST data (if any):</strong><br>'); 
     } 

     curl_close($ch); 

    } catch (Exception $e) { 
     //print the error stuff 
    } 

返回的錯誤代碼是0 ...這意味着一切都OK ......但因爲沒有回來屏幕...我很確定它不工作。

有人嗎?

+0

原來,這是一個域問題。我對此並不是100%確定,但它向我解釋的方式是,由於該網站位於子域,因此我們需要獲得通配證書。一旦我們得到了,一切都奏效了。我可能會解釋這是完全錯誤的,如果我是我稍後更新的,但是一旦我們獲得了正確的SSL設置,這段代碼就完美了。 – JoeCianflone 2011-05-25 20:23:18

回答

0

您提取的$ errCode是確定時爲200-299的HTTP代碼。獲得0意味着它從來沒有因爲問題或類似原因而被設置。

你應該在curl_exec()之後使用curl_errno()來判斷事情是否正常。 (你不能容易地檢查curl_exec()返回代碼的錯誤,因爲你啓用了CURLOPT_RETURNTRANSFER,它使得該函數返回它設置的傳輸內容。當然,根本沒有獲得任何內容是一個很好的指標的東西失敗了。)

0

我使用CURLOPT_CAINFO你已經表示實施libcurl中證證書......

然而,通過提供文件名本身還不夠好?它也撞在了我身上。

對我來說,文件被相對路徑引用......此外,我還必須確保證書也是Base64格式。然後,一切都經歷了順利......