Web服务XML请求中的错误处理

时间:2011-08-30 12:12:07

标签: php xml curl xmlhttprequest

我一直在尝试执行XML请求。我遇到了很多问题,我设法解决了。但这个我无法解决。 这是剧本:

$url ="WebServiceUrl";
$xml="XmlRequest";
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_MUTE, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
            curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($ch);
            curl_close($ch);
 echo $output;

它给了我这个错误:

System.InvalidOperationException:请求格式无效:text / xml。 System.Web.Services.Protocols.ProtProcessRequest()

中的System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()

我仍然是一个菜鸟。所以对我很轻松:) 感谢。

2 个答案:

答案 0 :(得分:0)

看起来你发送的东西是text / xml,这不是它想要的。查找此网络服务的文档,例如WSDL的东西,如果它存在,并找出它接受的数据格式。

确保例如在收到作为标准HTML POST变量的请求之后,它并没有真正说它会以XML响应。

答案 1 :(得分:0)

HTTP POST方法使用两种主要内容类型:application / x-www-form-urlencoded和multipart / form-data。

content-type确定CURLOPT_POSTFIELDS的格式应该是什么。如果您使用的是默认设置,即“application / x-www-form-urlencoded”,您可能希望使用build_http_query()来构建url编码的查询字符串。

如果要发送非ASCII数据,则可以使用与字段名称匹配的键和与该字段值对应的值来传递关联数组。使用此技术将导致使用multipart / formdata内容类型发出请求。

此时,听起来您的下一步应该是确定API所期望的字段。

application/x-www-form-urlencoded or multipart/form-data?