远程 WSDL 的加载可能发生在 SoapClient 的构造函数内部。请在首次获取之前提供代理:

$client = new SoapClient('https://service.example.com/api?wsdl', [
    'proxy_host' => '203.0.113.10',
    'proxy_port' => 8080,
    'proxy_login' => getenv('PROXY_USER'),
    'proxy_password' => getenv('PROXY_PASSWORD'),
    'connection_timeout' => 5,
    'exceptions' => true,
]);

请使用真实的 WSDL、代理主机/端口以及预期的凭据来源。主机字段是一个地址,端口则单独设置。

当它失败时需要检查的请求或操作
客户端构造WSDL 获取或文档处理。
所导入文档/架构的处理实际发生的额外获取 URL。
SOAP 方法调用WSDL 中声明的服务端点,可能在另一台主机上。

使用缓存 WSDL 的工作进程可能会跳过在另一台机器上失败的请求。请把缓存配置和实际失败的 URL 与对比结果一并保留,而不是仅凭构造成功就更换代理。

proxy_login/proxy_password 会对 中间层 进行认证。目标端的 login/password 以及 SOAP 层面的服务认证服务于其他层次。请使用专用选项,而不是把类似账号的标头放进 User-Agent;所需的应用程序标头应放在受支持的标头接口中。

记录 操作、目标以及发出质询的一方,并去除机密信息。connection_timeout 限制的是连接的建立,而不是长时间 SOAP 操作的总时长。

相关文章