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

PHP语言/服务器 专栏收录该内容
11 篇文章 0 订阅

    在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
    点赞
  • 2
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值