每次都通过https的SOAP请求失败

时间:2011-10-14 10:32:52

标签: php soap wsdl timeout

我第一次执行SOAP请求失败并再次失败。 我必须通过SOAP发送一些数据,但我没有得到稳定的连接。

我使用PHP的SOAP扩展。我的代码如下所示。

$certificate = file_get_contents(DATA_PATH.'/modules/va/misc/CKTC.cer');
$options = array(
                'uri'               => 'https://data2.kroschke.net/service/MeinAutoUeberfuehrungen',
                'allow_self_signed' => true,
                'verify_peer'       => true,
                'local_cert'        => $certificate,
                'trace'             => 1,
                'exceptions'        => true,
            );
$wsdl = 'https://data2.kroschke.net/service/MeinAutoUeberfuehrungen?WSDL';

$SOAPClient = new SoapClient($wsdl, $options);

fb($SOAPClient->__getFunctions());

现在我的问题是,SOAP请求总是会遇到超时。

我检查了我的php设置,并激活了SOAP和OpenSSL。

我还尝试使用.pem而不是.cer文件。同样的问题。

这是我一直得到的: 警告:SoapClient :: SoapClient(https://data2.kroschke.net/service/MeinAutoUeberfuehrungen?WSDL):无法打开流:连接超时

任何可以提供帮助的人?

PS:不介意fb()函数。只是将所有内容打印到FireBug中的功能。

1 个答案:

答案 0 :(得分:1)

尝试在浏览器中打开https://data2.kroschke.nethttps://data2.kroschke.net/service/MeinAutoUeberfuehrungen?WSDL:您也会暂停。

最好的解决方案是与该soap-server的提供商(kroschke.com / kroschke.de进行联系?)并询问他们为什么他们的服务器已关闭或似乎挂起。

修改
这似乎不是问题,因此您唯一的选择是将超时设置为更高的值。为此,只需将connection_timeout(以秒为单位的值)添加到您的选项中:

$options = array(
            'uri'               => 'https://data2.kroschke.net/service/MeinAutoUeberfuehrungen',
            'allow_self_signed' => true,
            'verify_peer'       => true,
            'local_cert'        => $certificate,
            'trace'             => 1,
            'exceptions'        => true,
            'connection_timeout'=> 30
        );

如果它仍然超时,将值设置得更高 - 如果它仍然超时那么,在用PHP实现它之前尝试使用像soapUI之类的程序测试soap通信 - 如果你遇到soapUI问题也可以联系该soap-server的提供商,询问为什么他们的方法需要很长时间。

有关详细信息,请查看soapclient and it's options