带代理的PHP SoapClient:如何通过代理访问模式



当使用代理选项初始化SoapClient类时,WSDL及其方法将通过代理正确访问:

$client = new SoapClient(
    WSDL_URL, 
    array(
        'proxy_host'     => PROXY_HOST,
        'proxy_port'     => PROXY_PORT
    )
);

schema (schemaLocation)不能通过指定的代理访问:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified">
    <xs:import namespace="http://example.com/webservice/cisbase" schemaLocation="http://example.com/ws/cis_base.xsd"/>
    <xs:import namespace="http://de.ws.example" schemaLocation="http://example.com/ws/is_base_de.xsd"/>
</xs:schema>

这导致:

SOAP-ERROR: Parsing Schema: can't import Schema from…

所以基本上SoapClient正在尝试访问cis_base。Xsd is_base_de。没有代理的Xsd

是否有一个原因,为什么PHP SoapClient行为像这样,有一个解决方案?

在我的代码中,我使用这些选项,这与我们的代理和https协议工作得很好。我希望这对你有用:)

        'proxy_host' => PROXY_HOST, 
        'proxy_port' => PROXY_PORT,
        'stream_context' => stream_context_create(
            array(
                'ssl' => array(
                    'verify_peer'       => false,
                    'verify_peer_name'  => false,
                )
            )
        )

问候。

尝试:

$client = new SoapClient(
    WSDL_URL, 
    array(
        'proxy_host'     => PROXY_HOST,
        'proxy_port'     => PROXY_PORT,
        'stream_context' => stream_context_create(
            array(
                'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT",
                'request_fulluri' => true,
            )
        ),
    )
);

您可能需要检查PHP文档中其他可能的参数

相关内容

  • 没有找到相关文章

最新更新