0

我正在与第 3 方的 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”

4

1 回答 1

1

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

所以而不是:

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

像这样:

$post = file_get_contents('@/tmp/file');
于 2013-06-06T18:25:29.853 回答