在PHP中复制命令行cURL

时间:2013-06-06 17:48:25

标签: php curl

我正在与第三方的API集成,我必须发布一些XML,然后我得到一些XML。

在CLI上运行,我得到了积极的回应。

curl -X POST -d @/tmp/file http://url/to/endpoint --header "Content-Type:application/x-www-form-urlencoded"

然而,这不起作用,响应包含一个错误,告诉我我的请求XML无效。

$ch = curl_init();

$post = array(
  'file' => '@/tmp/file'
);

curl_setopt($ch, CURLOPT_URL,             'http://url/to/endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,  true);
curl_setopt($ch, CURLOPT_POST,            true);
curl_setopt($ch, CURLOPT_HTTPHEADER,      array('Content-type:application/x-www-form-urlencoded'));

curl_setopt($ch, CURLOPT_POSTFIELDS,      $post);

$this->responseBody = curl_exec($ch);

curl_close($ch);

在两种情况下都是相同的文件,它位于同一台服务器上。该文件只是纯文本XML。我能看到的唯一区别是我在PHP版本的HTTP头中指定了一个字段名。

如何使用PHP发送该文件以完全复制CLI版本,例如没有formdata / fieldname位?

FWIW我几天不能回到API的开发人员那里问他将什么定义为'坏XML'

1 个答案:

答案 0 :(得分:1)

尝试将文件作为原始数据传递,而不是在数组中传递,例如使用file_get_contents()

所以而不是:

$post = array('file' => '@/tmp/file');

像这样:

$post = file_get_contents('@/tmp/file');