首页 >后端开发 >php教程 >为什么我的 SoapClient 在 Linux 上无法解析 WSDL,但在 WAMP 上却可以?

为什么我的 SoapClient 在 Linux 上无法解析 WSDL,但在 WAMP 上却可以?

Linda Hamilton
Linda Hamilton原创
2024-11-08 06:34:02859浏览

Why Does My SoapClient Fail to Parse WSDL on Linux But Work on WAMP?

SOAP 错误:解析 WSDL:无法从 WSDL URL 加载

问题

在 Linux 主服务器上,SoapClient 无法解析来自给定 URL 的 WSDL,导致错误:“SOAP-ERROR: Parsing WSDL: Couldn't load from - 但适用于 WAMP”。但是,直接调用 URL 或从命令行使用curl 会返回预期的 XML 响应。

答案

缺少用户代理字符串:

For对于某些版本的 PHP,SoapClient 默认情况下可能不会发送 HTTP 用户代理信息。这可能会导致正在使用的 Web 服务出现问题。

解决方案:

使用上下文流显式设置用户代理:

$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);

Web 服务问题:

此外,还发现了相关 Web 服务在没有用户代理字符串的 IPv6 请求方面存在问题。要验证这一点,请在 Linux 主机上尝试以下命令:

curl  -A ''  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
curl  -A 'cURL User Agent'  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

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

没有用户代理的 IPv6 请求将失败,而所有其他请求将成功。这表明 Linux 主机正在将 Web 服务的域解析为其 IPv6 地址,并且 SoapClient 默认情况下未添加用户代理字符串。

以上是为什么我的 SoapClient 在 Linux 上无法解析 WSDL,但在 WAMP 上却可以?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn