2014-12-10 126 views
-1

我想獲得一個PHP腳本來訪問Puppet API。我花了2天搜索,不能相信我無法找到任何信息(只有安裝PHP的puppet模塊)。我如何使用PHP訪問Puppet API

我只是想使用PHP和捲曲,但我無法獲得任何形式的響應,錯誤或任何東西。這是我的(很基本的)企圖擺脫傀儡師的證書:

function get_data($url) { 

    $request_headers = array(); 
    $request_headers[] = 'Accept: s'; 

    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
}  
    $response = get_data('https://<puppet master>:8140/production/certificate/ca'); 

所有我試圖複製是捲曲的呼叫,從我的服務器的工作原理:我有一個

curl -k -H "Accept: s" https://<puppet master>:8140/production/certificate/ca 

感覺可能有某種明顯的缺失,但我無法弄清楚。

+0

所以......你爲什麼不在你的PHP腳本中設置'Accept:s'標題? – Wrikken 2014-12-10 22:38:12

+0

Doh,我錯過了添加到我的問題,感謝指出(編輯)。我仍然沒有回覆數據。 – omeek 2014-12-10 22:45:54

+0

好的,不包括命令行中的下一個:將'CURLOPT_SSL_VERIFYPEER'設置爲false。如果這仍然不起作用,請嘗試'curl_error($ ch);'讓它告訴你爲什麼失敗。 – Wrikken 2014-12-10 22:49:53

回答

0

感謝Wrikken和Glen讓我走上正軌。一旦我正確設置了curl_setopt選項,它就會按預期工作。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem"); 
+1

只要站起來,不要驗證連接中使用的SSL證書,就可能使您容易受到API請求中的某些中間人類型攻擊。檢查出[這個答案](http://stackoverflow.com/a/18972719/3147637)SO上的一個可能的解決方案,而不使用上述方法。 – Glen 2014-12-10 22:59:47

+0

感謝Glen的領導。我將繼續努力,讓它至少能夠正確編碼。你們是非常有幫助的! 更新:格倫,那篇文章是非常有用的,我現在正常工作。再一次,謝謝你(和Wrikken)! – omeek 2014-12-10 23:02:22