【问题标题】:How can I access the Puppet API using PHP如何使用 PHP 访问 Puppet API
【发布时间】:2015-02-09 07:20:14
【问题描述】:

我正在尝试获取一个 PHP 脚本来访问 Puppet API。我花了 2 天时间搜索,无法相信我找不到任何信息(只有用于安装 PHP 的 puppet 模块)。

我只是想使用 PHP 和 curl,但我无法得到任何类型的响应、错误或任何东西。这是我(非常基本的)尝试从木偶大师那里获得证书:

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 调用:

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

我有一种感觉,我可能遗漏了一些明显的东西,但我无法弄清楚。

【问题讨论】:

  • 那么...为什么不在 PHP 脚本中设置 Accept: s 标头?
  • Doh,我错过了将其添加到我的问题中,感谢您指出这一点(已编辑)。我仍然没有收到响应数据。
  • 好的,命令行中的下一个不包括在内:将 CURLOPT_SSL_VERIFYPEER 设置为 false。如果还是不行,试试curl_error($ch); 让它告诉你失败的原因。
  • Wrikken,成功了!非常感谢。我认为我的挫败感使我没有看到这个问题。

标签: php curl puppet


【解决方案1】:

感谢 Wrikken 和 Glen 让我走上正轨。一旦我正确设置了 curl_setopt 选项,它就会按预期工作。

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

【讨论】:

  • 请注意,不验证连接中使用的 SSL 证书可能会使您的 API 请求容易受到某些中间人类型的攻击。在 SO 上查看this answer 以获得不使用上述方法的可能解决方案。
  • 感谢 Glen 的提醒。既然我至少有一些东西可以使用,我将继续努力让它正确编码。你们非常有帮助!更新:格伦,那篇文章很有帮助,我现在可以正常工作了。再次感谢您(和 Wrikken)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2018-01-12
  • 2015-08-24
  • 2020-11-04
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
相关资源
最近更新 更多