PHP 5.2 と cURL を使用して、ベンダーのサーバーに対して POST しようとしています。サーバーに対して投稿する XML ドキュメントを読み込んでから、応答を読み込んでいます。
$request = trim(file_get_contents('test.xml'));
$curlHandle = curl_init($servletURL);
curl_setopt($curlHandle, CURLOPT_POST, TRUE);
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, array('XML'=>$request));
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curlHandle, CURLOPT_HEADER, FALSE); # Have also tried leaving this out
$response = curl_exec($curlHandle);
そのコード自体は正常に動作しますが、他のサーバーは XML パーサーから次のような応答を返します。
プロローグで許可されていないコンテンツ
そのエラーを調べたところ、これは通常、XML の前の空白が原因で発生しますが、XML ファイル自体に空白が含まれていないことを確認し、trim() でそれをクリアする必要があります。コードの実行中に接続で TCPDump を実行したところ、次のように送信されました。
POST {serverURL} HTTP/1.1
Host: {ip of server}:8080
Accept: */*
Content-Length: 921
Expect: 100-continue
Content-Type: multipart/form-data; boundry:---------------------------01e7cda3896f
---------------------------01e7cda3896f
Content-Disposition: form-data; name="XML"
[SNIP - the XML was displayed]
---------------------------01e7cda3896f--
Ethereal でセッションを再生すると、[SNIP] 行の前後に空白が表示されます。これが問題の原因ですか?もしそうなら、どうすればそれを取り除くことができますか?