调用webservice,出现错误:Uncaught SoapFault exception: [HTTP] Error Fetching http headers

来源:互联网 发布:怎样开淘宝网店卖衣服 编辑:程序博客网 时间:2024/05/23 02:22

    在PHP中调用webservice发布的服务(__Call),报如下错:

    Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in Test.php:18 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://xxx.xxx....', 'urn:webservi...', 1, 0) #Test.php(18): SoapClient->__call('Login', Array) #2 {main} thrown in

    报该错误的其中一个原因是:在客户端等待的时间内,未收到服务器端返回的信息。

    于是在客户端的请求页面中,加入代码(ini_set('default_socket_timeout',80);),延长客户端的等待时间,此时,返回错误信息:

    Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxx.xxx.xxx:80/webserviceTest.php?wsdl' in Test.php:13 Stack trace: #0 Test.php(13): SoapClient->__call('Login', Array) #1 {main} thrown in Test.php on line 13

    查看了测试代码:

    $ws     = "http://xxx.xxx.xxx.xxx/webserviceTest.php";

    $client = new SoapClient($ws);

    $Token = $client->__Call('Login',$d); 

    在执行上面的第三行代码时报的错。

 

    查看了代码中php调用webservice的全过程,

    1、发布 webservice 服务地址;

    2、通过 SoapClient 类生成soap客户端(Get方法);

    3、soap 客户端 调用具体的服务方法(POST方法);

        3.1 通过 SoapServer 类生成soap服务端(Get方法);

        3.2 执行实例化的SoapServer 中的类中的具体方法;

    整理出如下的原理图:

 

    可通过该原理图,一步一步的调试问题出在哪里,我们出现上述错误是网络通信的问题。

    1)请求的客户端与服务器端是否是通的?----也就是 能否成功生成实例化的soapClient 对象:当客户端与生成soapClient 对象的url-1 相通,只要其他配置正确,该步可成功。

    2)请求的客户端与其的soapClient 中的WSDL配置文件(.wsdl)中配置的address 是否是通的。

    3)被请求的服务器端 与其生成 SoapServer 的地址是否是通的?----也就是 能否成功生成实例化的SoapServer 对象

PS:判断两者间是否相通的方法:查看Soap配置的是什么协议,当是HTTP协议时,只要在客户端的地址栏中输入另一个的url地址,若能成功访问,则说明两者相通。

 

    我这边最后发现问题出在3)被请求的服务器端 与其生成 SoapServer 的地址不相通,以致于生成 SoapServer 失败。错误便表现出来了,也便报错了如题的错误。

 

 

   

0 0