我需要从 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/