0

私はサードパーティの API と統合しています。いくつかの XML を POST する必要があり、いくつかの 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 を使用してそのファイルを送信し、たとえば formdata/fieldname ビットなしで CLI バージョンを正確に複製するにはどうすればよいですか?

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 に答える