PHP curl请求中的参数丢失/损坏

时间:2013-03-21 15:45:22

标签: php curl google-visualization

更新:我已使用file_get_contents(或其他文件操作,例如fopen)而非curl解决了此问题,如下例所示:{{ 3}}。因此,问题是,为什么curl无法在文件操作时发布正确的参数?这基本上要求curl与file_get_contents ...

之间的区别

原始问题

我在PHP中使用curl下载图像。该图片是根据通过GET或POST传递给https://developers.google.com/chart/image/docs/post_requests的参数生成的Google图表(https://developers.google.com/chart/image/)。这是一个示例图表:

http://chart.googleapis.com/chart

简单的方法是获取此URL,并且它可以工作。但是,当我尝试获取更长的URL(图表数据的参数更多)时,Google Chart返回了400页,说“格式错误或非法请求”。我将浏览器指向更长的URL并查看了所需的图表,从而可以验证URL中的参数是否正确。

怀疑问题可能是网址太长,我使用了POST。以下是我使用POST获取示例图表的方法(完整代码,您可能需要复制并运行):

$postData = array(
  'chl' => 'Hello|World',
  'chs' => '250x100',
  'cht' => 'p3',
  'chd' => 't:60,40',
  'chof' => 'validate'   // turn on the debugging mode
);
$ch = curl_init('http://chart.googleapis.com/chart');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
$ret = curl_exec($ch);
$info = curl_getinfo($ch);
echo $info["request_header"];   // check my sent header
echo $ret;   // print out received data, expected: garbled text representing a PNG
curl_close($ch);

然后Google图表返回(即使是此示例图表)400页,说“图表API请求不包含有效参数”。注意单词“valid”在这里,与“Chart API请求不包含任何参数”相反,完全不接收任何参数。因此,Google Chart必须已收到一些参数,但只是它无法识别它们。

0 个答案:

没有答案