首页  >  文章  >  后端开发  >  为什么我的 SOAP 客户端可以在 WAMP 上运行,但在 Linux 上却失败并出现“SOAP-ERROR: Parsing WSDL: Couldn't load from”?

为什么我的 SOAP 客户端可以在 WAMP 上运行,但在 Linux 上却失败并出现“SOAP-ERROR: Parsing WSDL: Couldn't load from”?

Susan Sarandon
Susan Sarandon原创
2024-11-08 18:45:02687浏览

Why Does My SOAP Client Work on WAMP But Fail With

无法解析 WSDL:“SOAP-错误:解析 WSDL:无法加载 - 但可在 WAMP 上运行”

在这种情况下,个人会遇到在 Linux 服务器上使用 SOAP 客户端时出现的问题。虽然代码在 WAMP 服务器上完美运行,但它失败并显示一条错误消息,指出“SOAP-ERROR:正在解析 WSDL:无法加载。”

原因

根本问题,如据知情人士透露,问题在于SoapClient在特定PHP版本中不传输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);

其他见解

受访者进一步观察到,相关网络服务表现出一种特殊的特征 行为。在没有用户代理字符串的情况下通过 IPv6 发出的请求会失败,而使用 IPv4 或用户代理字符串发出的请求会成功。这表明 Web 服务的配置存在潜在问题。

为了验证这一点,受访者演示了使用和不使用用户代理字符串发出 HTTP 请求时的行为差异:

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

(成功)

最终,问题源于来自 IPv6 HTTP 请求、SoapClient 中不充分的用户代理信息以及 Web 服务本身的潜在缺陷的组合。

以上是为什么我的 SOAP 客户端可以在 WAMP 上运行,但在 Linux 上却失败并出现“SOAP-ERROR: Parsing WSDL: Couldn't load from”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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