通过代理向https请求Soap

问题描述 投票:0回答:1

我想通过PHP上的代理调用SOAP方法。 WSDL路径是https://eaisto.gibdd.ru/common/ws/arm_expert.php?wsdl

我试过这样的:

$url = 'https://eaisto.gibdd.ru/common/ws/arm_expert.php?wsdl';

$soap_params = array(
    'stream_context' => stream_context_create(
        array(
            'ssl' => array(
                'SNI_enabled' => false
            ),
            'http' => array(
                'proxy' => 'tcp://54.193.18.175:80'
            ),
        )
    ),
    'connection_timeout' => self::CONNECTION_TIMEOUT,
    'proxy_host'     => '54.193.18.175',
    'proxy_port'     => '80'
);

$gibdd_client = new SoapClient(self::GIBDD_URL, $soap_params);
$get_data_request = $gibdd_client->GetCardByVin(array());

但它不起作用。错误:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://eaisto.gibdd.ru/common/ws/arm_expert.php?wsdl' : failed to load external entity "https://eaisto.gibdd.ru/common/ws/arm_expert.php?wsdl"

当我使用http://eaisto.gibdd.ru/common/ws/arm_expert.php?wsdl而不是https://eaisto.gibdd.ru/common/ws/arm_expert.php?wsdl时,它可以正常工作。我如何通过代理向https发送SOAP请求?

我试过了

'ssl' => array(
    'SNI_enabled' => false,
    'verify_peer' => false,
    'verify_peer_name' => false,
),

但这也行不通。

php soap https proxy
1个回答
0
投票

这应该工作:

$streamContext = stream_context_create([
    'ssl' => [
        'verify_peer' => true,
        'cafile' => <path to the CA file>,
        'local_cert' => <path to your PEM cert>,
        'local_pk' => <path to your private key PEM file>
    ]
]);

$options = [
    'proxy_host' => '<your proxy host>',
    'proxy_port' => <your proxy port>
    'proxy_login' => '<your proxy login>',
    'proxy_password' => '<your proxy password>',
    'stream_context' => $streamContext
]

$soapClient = new SoapClient($wsdl, $options);

我在PHP5.4上成功地做到了这一点,但我想知道它是否仍然适用于现代版本的PHP:有一个可能会回来的bug:https://bugs.php.net/bug.php?id=50489

另请注意,错误消息没有帮助。例如。我收到错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:当代理拒绝使用HTTP / 1.1进行身份验证时的未知协议403 Forbidden ...奇怪且无用......

© www.soinside.com 2019 - 2024. All rights reserved.