PHP Soap客户端随机错误

时间:2015-01-04 14:36:39

标签: php soap

我在这里头疼。基本上我有一个脚本,它与肥皂服务一起使用,以检索有关货物的详细信息。使用xampp在本地运行脚本运行完美且没有错误,但是在我的客户端实际生产服务器上有时它会工作,有时它会抛出一个异常,说明它无法解析wsdl文件或无法连接到主机。

每次我遇到这些错误,我都会检查服务是否正在运行,每次我这样做都很好。

我尝试在脚本文件的顶部设置以下选项:

ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
libxml_disable_entity_loader(false);

我注意到的是,如果在脚本执行期间抛出超过三个异常,服务器将返回500内部错误。有没有人对可能导致这些问题的原因有任何建议?

这是其中一条错误消息,我将在重新测试脚本时添加更多内容:

SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl' : failed to load external entity "https://api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl

 SoapFault exception: [HTTP] Error Fetching http headers

服务器已启用OpenSSL,因此不应该出现问题。

尝试下载并在本地使用wsdl文件,结果相同。到目前为止,我已经完成了这个选项。

2 个答案:

答案 0 :(得分:0)

我最终放弃了php的内置soap客户端,并决定尝试通过curl发送和接收请求,这实际上比内置函数更加奇怪地工作,但经过这么多查询后我仍然最终得到了500内部服务器错误。我最终不得不打破这个过程,以便在需要的时候只能在20个大块中查询服务。

答案 1 :(得分:0)

您知道,这个错误最有可能发生在未指定的端口上。 这就是它在更新版本的PHP / Soap上产生这种临时行为的原因。

$soapClient = new SoapClient('https://api.ukmail.com:443/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl', $params);

它会侦听端口80而不是443的响应。在网址中添加:443 为我解决了这个问题。

正在生成的500错误是SOAP PHP错误解析WSDL:无法加载外部实体。

相关问题