具体什么个情况也不清楚,但是对方是用java或者c#写的服务端
在文档中,明确说明了,请求的xml内容格式
按照php调用普通webservice接口的办法,始终无法得到结果
在$client->__getLastRequestHeaders() 调试很久以后,得到一个结果,我感觉php原生的soapclient构造的请求结构不符合对方的要求
于是网上找了下,看到一篇文章:http://www.tuicool.com/articles/FfqQ3m
其中,可以通过curl自定义发送请求体,于是,自己构造了请求内容发送过去,成功获取到结果。
这里记录下通过curl自定义请求的代码:
$postAllString = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><soapenv:Header/><soapenv:Body> <tem:Login> <tem:account>'.$uid.'</tem:account> <tem:pwd>'.$psw.'</tem:pwd> </tem:Login> </soapenv:Body></soapenv:Envelope>'; $soap_do = curl_init(); curl_setopt($soap_do, CURLOPT_URL, $url); curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($soap_do, CURLOPT_TIMEOUT, 10); curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true); curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($soap_do, CURLOPT_POST, true); curl_setopt($soap_do, CURLOPT_POSTFIELDS, $postAllString); curl_setopt($soap_do, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8', 'Content-Length: ' . strlen($postAllString))); $result = curl_exec($soap_do); if (curl_errno($soap_do)) { return false; } //对返回的xml内容进行解析 $p = xml_parser_create(); xml_parse_into_struct($p, $result, $vals, $indexs); xml_parser_free($p); //打印看下内容吧 print_r($vals);
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《php的soapclient构造的请求不符合服务端验证的问题》
发表评论