更新:我已使用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必须已收到一些参数,但只是它无法识别它们。