当尝试在 Linux 主服务器上使用 SoapClient 时,用户可能会遇到错误消息“SOAP-ERROR:正在解析 WSDL:无法从“http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl”加载。”尽管脚本在 WAMP 服务器上正常运行,但仍会出现此问题。
要解决此问题,建议探索服务器和 WAMP 环境之间 PHP 版本的潜在差异。较旧的 PHP 版本可能缺乏通过 SoapClient 请求发送用户代理字符串所需的功能。
如果是这种情况,显式指定用户代理字符串可以解决该问题。这可以通过使用流上下文来实现,如下所示:
try { $opts = array( 'http' => array( 'user_agent' => 'PHPSoapClient' ) ); $context = stream_context_create($opts); $wsdlUrl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'; $soapClientOptions = array( 'stream_context' => $context, 'cache_wsdl' => WSDL_CACHE_NONE ); $client = new SoapClient($wsdlUrl, $soapClientOptions); $checkVatParameters = array( 'countryCode' => 'DK', 'vatNumber' => '47458714' ); $result = $client->checkVat($checkVatParameters); print_r($result); } catch(Exception $e) { echo $e->getMessage(); }
或者,据观察,此问题可能是由于 HTTP over IPv6 的组合和缺少用户代理字符串而引起的在请求中。在这些条件下,涉及的 Web 服务可能会出现问题。
要确认这一点,请在 Linux 主机上执行以下命令:
curl -A '' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
如果 IPv6 请求失败,请尝试添加用户代理字符串:
curl -A 'cURL User Agent' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
两个 IPv4 请求都应该成功:
curl -A '' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl curl -A 'cURL User Agent' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
如果这些观察结果成立是的,Linux 主机可能会将 URL 解析为其 IPv6 地址,并且服务器上的 SoapClient 版本默认情况下不会附加用户代理字符串。
以上是当脚本在 WAMP 上运行时,为什么 Linux 服务器上会出现'SOAP-ERROR: Parsing WSDL: Couldn't Load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'”?的详细内容。更多信息请关注PHP中文网其他相关文章!