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

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

Linda Hamilton
发布: 2024-11-08 06:34:02
原创
837 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板