将数据 POST 到 XML 服务器时,尽管指定了内容长度,仍出现 Content-Length 错误
我有一个非常奇怪的错误。我正在尝试使用以下代码将数据 POST 到 XML 数据:
`$url = "http://www.example.appspot.com/clients";
$post_string = "<客户>
ABCDE <名字>
<
公司> <
电话>< /电话>
电子邮件
>
/
<
< 地址线2>
gt;&
lt;/县><
/
邮政编码>
;
$header = "POST HTTP/1.0 \r\n";
$header .= "内容类型:text/xml \r\n";
$header .=“内容长度:”。 strlen($post_string)." \r\n";
$header .= "内容传输编码:文本 \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, "用户名:密码");
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 <客户> < id>< /id> <姓氏>ABCDE< /姓氏> <名字>< /名字> <公司>< /公司> <电话>< /电话> <移动>< /移动> <传真>< /传真> <网站>< /网站> <电子邮件>< /电子邮件> <地址行1>< /地址行1> <地址行2>< /地址行2> <地址行3>< /地址行3> <镇>< /城镇> <县>< /县> <邮政编码>< /邮政编码> < /客户端>
想知道如何解决这个问题,我已经明确指定了内容长度标头?!还有其他人有这个问题吗?你是怎么解决的?
I have a really strange error. I'm trying to POST data to an XML data using the following code:
`$url = "http://www.example.appspot.com/clients";
$post_string = "< client>
< id>< /id>
< lastName>ABCDE< /lastName>
< firstName>< /firstName>
< company>< /company>
< telephone>< /telephone>
< mobile>< /mobile>
< fax>< /fax>
< website>< /website>
< email>< /email>
< addressLine1>< /addressLine1>
< addressLine2>< /addressLine2>
< addressLine3>< /addressLine3>
< town>< /town>
< county>< /county>
< postcode>< /postcode>
< /client>";
$header = "POST HTTP/1.0 \r\n";
$header .= "Content-type: text/xml \r\n";
$header .= "Content-length: ". strlen($post_string)." \r\n";
$header .= "Content-transfer-encoding: text \r\n";
$header .= "Connection: close \r\n\r\n";
$header .= "Content-length: ". 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); `
But this returns this error:
Length Required
POST requests require a Content-length header.
(which is from curl_exec($ch))
And this the header data printed out (print $header):
POST HTTP/1.0 Content-type: text/xml Content-length: 381 < client> < id>< /id> < lastName>ABCDE< /lastName> < firstName>< /firstName> < company>< /company> < telephone>< /telephone> < mobile>< /mobile> < fax>< /fax> < website>< /website> < email>< /email> < addressLine1>< /addressLine1> < addressLine2>< /addressLine2> < addressLine3>< /addressLine3> < town>< /town> < county>< /county> < postcode>< /postcode> < /client>
Wondering how to solve this problem I've clearly specified the content length header?! Does anyone else have this problem? How did you solve it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
来自手册引用
CURLOPT_CUSTOMREQUEST
...因此,
CURLOPT_CUSTOMREQUEST
选项应仅设置为"POST"
。我认为您可能想将该
$header
字符串转换为与CURLOPT_HTTPHEADER
选项配对的标头数组,但不包含顶部的POST
标题。并且,也不要在标头中包含$post_string
- 它属于请求正文。From the manual referencing
CURLOPT_CUSTOMREQUEST
...So,
CURLOPT_CUSTOMREQUEST
option should be set only to"POST"
.I think you may want to instead convert that
$header
string to an array of headers pared with theCURLOPT_HTTPHEADER
option, but do not include the topPOST
header. And, do not include the$post_string
in the headers either - that belongs in the request body.