php - cURL 未获取预期的 POST 响应 - 错误 405

标签 php cakephp curl highcharts http-status-code-405

我需要从 Highcharts 导出服务器获取多个图表(因为我尚未在自己的服务器上实现该功能)。

Highcharts 在这里展示了一个非常清晰的示例: http://export.highcharts.com/demo

我尝试使用 Linux 中的 curl 命令模拟该表单,成功了。

但是,当尝试从 PHP(特别是从 CakePHP Controller )运行curl 时,我收到 HTTP 错误:

HTTP Status 405 - Request method 'POST' not supported

出了点问题,因为 POST 方法通过导航器和curl 命令以交互方式工作。

此外,我还测试了 PHP 脚本,将其指向 posttestserver.com,该网站旨在调试 POST 请求的结果。我的测试结果在这里:http://www.posttestserver.com/data/2014/03/10/10.18.221071980127

这是CakePHP Controller 的方法代码:

public function obtenir() {

    $ch = curl_init("http://export.highcharts.com/demo");

    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array(
            "content" => "options",
            "options" => "%7B%0D%0A%09xAxis%3A+%7B%0D%0A%09%09categories%3A+%5B%27Jan%27%2C+%27Feb%27%2C+%27Mar%27%2C+%27Apr%27%2C+%27May%27%2C+%27Jun%27%2C+%27Jul%27%2C+%27Aug%27%2C+%27Sep%27%2C+%27Oct%27%2C+%27Nov%27%2C+%27Dec%27%5D%0D%0A%09%7D%2C%0D%0A%09series%3A+%5B%7B%0D%0A%09%09data%3A+%5B29.9%2C+71.5%2C+106.4%2C+129.2%2C+144.0%2C+176.0%2C+135.6%2C+148.5%2C+216.4%2C+194.1%2C+95.6%2C+54.4%5D%0D%0A%09%7D%5D%0D%0A%7D%3B%0D%0A",
            "type" => "image%2Fpng",
            "width" => "",
            "scale" => "",
            "constr" => "Chart",
            "callback" => "function%28chart%29+%7B%0D%0A%09chart.renderer.arc%28200%2C+150%2C+100%2C+50%2C+-Math.PI%2C+0%29.attr%28%7B%0D%0A%09%09fill+%3A+%27%23FCFFC5%27%2C%0D%0A%09%09stroke+%3A+%27black%27%2C%0D%0A%09%09%27stroke-width%27+%3A+1%0D%0A%09%7D%29.add%28%29%3B%0D%0A%7D%0D%0A%09%09%09",
            ));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded; charset=UTF-8"));
    curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $page = curl_exec($ch);

    $head = curl_getinfo($ch, CURLINFO_HEADER_OUT);
    debug($head);
    debug($page);

    curl_close($ch);

}

debug($page) 的结果是一个 HTML 格式的文本,其中包含重要内容:

HTTP 状态 405 - 不支持请求方法“POST”

我做错了什么?

非常感谢。

最佳答案

使用 http_build_query() 通过您的帖子参数数组进行帖子。否则,其被识别为多部分表单发布。

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( array(...) ));

请确保 POST 网址也正确。

关于php - cURL 未获取预期的 POST 响应 - 错误 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307079/

相关文章:

php-Mysql-smarty 获取多表数据

php - 将 2 pdf 与 Zend Framework 合并

regex - 如何在1and1共享主机上为Cake 2.3.x配置htaccess文件

php - 使用连接语句和子查询的 CakePHP 查询准备

javascript - 将 Facebook API Curl 请求转换为 Javascript,以便在 Google 表格中使用 ImportJSON 函数

curl - SoundCloud/users/{id}/tracks 网址无效

PHP 和 CSS - 我应该链接还是包含?

php - 谷歌地图 API

session - 关闭浏览器时销毁 CakePHP session

php - 代理后面的 curl 发布文件返回错误