我在这里头疼。基本上我有一个脚本,它与肥皂服务一起使用,以检索有关货物的详细信息。使用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文件,结果相同。到目前为止,我已经完成了这个选项。
答案 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:无法加载外部实体。