我正在尝试使用带有 cURL 的 PHP 5.2 对供应商的服务器进行 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] 行之前和之后有可见的空白。这是导致问题的原因吗?如果是,我该如何删除它,或者我看得太远了,这可能是我发布的服务器的问题?