尽管在将数据发布到XML服务器时指定了内容长度,但仍会出现Content-Length错误

时间:2011-04-29 19:54:54

标签: php xml post

我有一个非常奇怪的错误。我正在尝试使用以下代码将数据发布到XML数据:

`$ url =“http://www.example.appspot.com/clients”;

$ post_string =“< client>

< ID>< / ID>

< lastName的> ABCDE< / lastName的>

<的firstName>< /&的firstName GT;

<公司>< /公司>

<电话>< /电话>

<移动>< /移动>

<传真>< /传真>

<网站>< /网站>

<电子邮件>< /电子邮件>

< addressLine1>< / addressLine1>

< addressLine2>< / addressLine2>

< addressLine3>< / addressLine3>

<镇>< /镇>

<县>< /县>

<邮政编码>< /邮编>

<客户/客户>“中;

$ header =“POST HTTP / 1.0 \ r \ n”;
$ header。=“Content-type:text / xml \ r \ n”;
$ header。=“内容长度:”。 strlen($ post_string)。“\ r \ n”;
$ header。=“Content-transfer-encoding:text \ r \ n”;
$ header。=“连接:关闭\ r \ n \ r \ n”;
$ header。=“内容长度:”。 strlen($ post_string)。“\ r \ n”;
$ header。= $ post_string;

$ ch = curl_init();
curl_setopt($ ch,CURLOPT_URL,$ url);

curl_setopt($ ch,CURLOPT_USERPWD,“username:password”);

curl_setopt($ ch,CURLOPT_CUSTOMREQUEST,$ header);
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ ch,CURLOPT_TIMEOUT,4); `

但这会返回此错误:

需要长度 POST请求需要Content-length标头。

(来自curl_exec($ ch))

这打印出标题数据(print $ header):

POST HTTP / 1.0 Content-type:text / xml Content-length:381<客户机GT; < ID>< / ID> < lastName的> ABCDE< / lastName的> <的firstName>< /&的firstName GT; <公司>< /公司> <电话>< /电话> <移动>< /移动> <传真>< /传真> <网站>< /网站> <电子邮件>< /电子邮件> < addressLine1>< / addressLine1> < addressLine2>< / addressLine2> < addressLine3>< / addressLine3> <镇>< /镇> <县>< /县> <邮政编码>< /邮编> < /客户机GT;

想知道如何解决这个问题我已经清楚地指定了内容长度标题?!还有其他人有这个问题吗?你是怎么解决的?

1 个答案:

答案 0 :(得分:0)

来自the manual引用CURLOPT_CUSTOMREQUEST ...

  

在执行HTTP请求时使用的自定义请求方法,而不是“GET”或“HEAD”。这对于执行“DELETE”或其他更加模糊的HTTP请求非常有用。有效值包括“GET”,“POST”,“CONNECT”等等;即这里不要输入整个HTTP请求行。例如,输入“GET /index.html HTTP / 1.0 \ r \ n \ r \ n”将不正确。

因此,CURLOPT_CUSTOMREQUEST选项只应设置为"POST"

我认为您可能希望将$header字符串转换为与CURLOPT_HTTPHEADER选项相匹配的标头数组,但不包括顶部POST标头。并且,不要在标题中包含$post_string - 属于请求正文。