我如何翻译这个curl命令,使其在PHP脚本中工作?
curl --request POST --data-binary '@import.xml' --header "Content-Type: application/atom+xml" --header "Content-Length: 378" "http://url.com"这不起作用:
$data = array('file'=>$filename);
$headers = array(
'Content-Type: application/atom+xml',
'Content-Length: 378'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'httpL//url.com');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);发布于 2011-09-10 04:21:16
试试这个:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/atom+xml'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://siteurl.com');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($filename));
curl_exec($ch);发布于 2011-07-20 06:53:27
正确的做法是将文件读入一个字符串,然后将该字符串提供给CURLOPT_POSTFIELDS选项。读入字符串的功能不是由libcurl提供的,而是由命令行客户端完成的,我认为PHP/CURL绑定没有提供相同的功能。
命令行使用--data- CURLOPT_POSTSFIELDS,它对应于带有字符串的二进制,而不是散列数组,因为数组会将post转换为多部分post (命令行对-F,--form执行此操作)。此外,设置为POST的自定义请求完全是多余的。
通常,使用"--libcurl test.c“运行命令行是使用C API获得C程序的第一个草案版本的好方法,但由于PHP API非常相似,因此在大多数情况下应该可以作为良好的开始。
编辑:自定义更改/提供"Content-Length:“标头从来都不是一个好主意,除非你非常清楚自己在做什么。libcurl将始终提供一个根据您传递给它的数据生成的库。
发布于 2011-07-19 23:36:51
$data = array('file'=> '@' . $filename); 你需要在文件名前面加上一个'@‘来告诉CURL它实际上是一个文件名,而不仅仅是一个字符串。头部也不是必需的,因为CURL会自己填充它们。
https://stackoverflow.com/questions/6749431
复制相似问题