繁体   English   中英

带有代理的PHP SoapClient:如何通过代理访问架构?

[英]PHP SoapClient with Proxy: How to access schema over proxy?

使用proxy-options初始化SoapClient类时,可以通过proxy正确访问WSDL及其方法:

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

但是,无法通过指定的代理访问架构(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错误:解析架构:无法从...导入架构

因此,基本上,SoapClient尝试在没有代理的情况下尝试访问cis_base.xsdis_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文档中的其他可能参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM