2011-08-30 107 views
0

我一直在尝试执行XML请求。我遇到了很多问题,我设法解决。但是这个我无法解决。 这是脚本:Web服务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:请求格式无效:文本/ XML。在System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()在System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

我仍然是这样的菜鸟。所以去容易我:) 谢谢。

+0

谁能帮助我? –

+0

如果它是WSDL使用'SoapClient',并且如果您需要使用此代码样式,请检查应请求的格式(并删除'text/xml'内容类型) –

+0

如何知道请求的格式? –

回答

0

看起来像你正在发送的东西为文本/ XML,这不是它想要的。查找此Web服务的文档WSDL的东西,如果它存在,并找出它接受的数据格式。

确保这并不是说它在接收到标准HTML POST变量请求后,会以XML响应。

+0

它会在收到请求后以XML响应 –

+0

以及Web服务的支持者告诉我尝试使用“application/x-www-form-urlencoded”作为内容类型。但同样的错误发生 –

+0

在这种情况下,它确实需要标准的HTML POST东西。查看CURLOPT_POSTFIELDS [here](http://www.php.net/manual/en/function.curl-setopt.php)的说明,并更改示例中的$ xml变量以匹配它们。 –

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?