折雨的天空

新浪微薄腾讯微薄

最新碎语:最近霉到了住。哎。。。

您的位置:折雨的天空 >php开发> php的soapclient构造的请求不符合服务端验证的问题

php的soapclient构造的请求不符合服务端验证的问题

具体什么个情况也不清楚,但是对方是用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构造的请求不符合服务端验证的问题

奖励一下

取消

分享不易,烦请有多多打赏,如您也困难,点击右边关闭即可!

扫码支持
扫码打赏,5元,10元,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

-秒后自动关闭,如已打赏,或者不愿打赏,请点击右上角关闭图标。

发表评论

路人甲 表情
看不清楚?点图切换