PHP SoapClient:SoapFault异常无法连接到主机

前端之家收集整理的这篇文章主要介绍了PHP SoapClient:SoapFault异常无法连接到主机前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用这个代码我做肥皂请求
$client = new SoapClient('http://example.com/soap/wsdl');

try {
    $result = $client->myMethod();
} catch (Exception $e) {
    echo $e->getMessage();
}

有时(十分之一),有一个例外:

SoapFault exception: [HTTP] Could not connect to host

我的尝试

1)我寻找解决方案,I read这个问题可以由wsdl缓存引起,我在PHP.ini中禁用它:

soap.wsdl_cache_enabled = 0
soap.wsdl_cache_ttl = 0

引起少数例外

2)我试图添加到主机的Windows(他们在Windows上)Windows / system32 / drivers / etc / hosts中的dns的分辨率:

160.XX.XXX.XX example.com

引起少数例外

3)我也试图禁用“Windows防火墙”,

引起少数例外

4)我也试图增加PHP.ini中的default_socket_timeout

default_socket_timeout = 90

什么也没有变

问题

服务器肥皂似乎没有问题.它也是从其他网站也没有问题.还有什么我能做的吗

我的设置

PHP 5.6

Apache 2.4

Windows Server 2012

UPDATE

经过多次测试,我认为问题是在网络中,肥皂服务器背后是反向代理,问题出现在代理中.

您需要进一步改进您的调试工作:

广告1)WSDL是否有所改变?如果没有,请打开WSDL缓存.您不需要连接到服务器来获取WSDL文件.

你提到的输出是真的在echo $e-> getMessage();?您可以在catch()块中添加一些调试代码,例如:

>检查是否可以以其他方式连接到服务器(例如file_get_contents($soap_url))
>如果没有,请检查您遇到什么样的错误

>打印时间并检查SOAP服务器上的错误日志
> 403对于服务器上的问题,禁止或类似的错误
> a无法将错误点连接到网络问题(不仅仅是机会更高)

>你可以尝试把它放在一个循环中(某些东西沿着($i = 0; $i< = 5; $i){/ * ... * / sleep(1); continue;})看看第二次尝试会使它工作 总而言之,“有时错误”很难调试,因此您应该尝试使其可重现(这将指向问题),或者您需要尽可能多地记录和输出数据,以便您可以看到问题是在发生的时候.

猜你在找的PHP相关文章