我有一个非常奇怪的错误。我正在尝试使用以下代码将数据发布到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;
想知道如何解决这个问题我已经清楚地指定了内容长度标题?!还有其他人有这个问题吗?你是怎么解决的?
答案 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
- 属于请求正文。