我正在与第三方的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'
答案 0 :(得分:1)
尝试将文件作为原始数据传递,而不是在数组中传递,例如使用file_get_contents()
。
所以而不是:
$post = array('file' => '@/tmp/file');
像这样:
$post = file_get_contents('@/tmp/file');