2014-12-10 123 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