Я пытаюсь POST против сервера поставщика, используя PHP 5.2 с cURL. Я читаю в 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--
До и после строки [SNIP] при воспроизведении сеанса в Ethereal есть видимые пробелы. Это является причиной проблемы и, если да, как я могу ее удалить, или я смотрю слишком далеко, и это может быть проблема с сервером, на котором я публикую сообщение?