gpt4 book ai didi

php - 在代理后面运行 PHP SoapServer

转载 作者:IT王子 更新时间:2023-10-29 00:18:43 28 4
gpt4 key购买 nike

我正在尝试在代理后面同时运行 PHP SoapClient 和 SoapServer(用于 Magento),其中唯一允许通过代理服务器的网络流量。

我已经和客户一起工作了:

$client = new SoapClient('https://www.domain.co.uk/api/v2_soap/?wsdl=1', [
'soap_version' => SOAP_1_1,
'connection_timeout' => 15000,
'proxy_host' => '192.168.x.x',
'proxy_port' => 'xxxx',
'stream_context' => stream_context_create(
[
'ssl' => [
'proxy' => 'tcp://192.168.x.x:xxxx',
'request_fulluri' => true,
],
'http' => [
'proxy' => 'tcp://192.168.x.x:xxxx',
'request_fulluri' => true,
],
]
),
]);

这按预期工作 - 所有流量都通过代理服务器。

但是,对于 SoapServer 类,我不知道如何强制它通过 SoapServer 发送所有出站流量。它似乎正在尝试加载 http://schemas.xmlsoap.org/soap/encoding/直接形成网络,而不是通过代理,这导致抛出“无法从‘http://schemas.xmlsoap.org/soap/encoding/’导入模式”错误。

我已尝试将 schemas.xmlsoap.org 的主机文件条目添加到 127.0.0.1 并在本地托管此文件,但我仍然遇到同样的问题。

有什么我想念的吗?

最佳答案

像在 file_get_contents 中一样尝试 stream_context_set_default: file_get_contents behind a proxy?

<?php
// Edit the four values below
$PROXY_HOST = "proxy.example.com"; // Proxy server address
$PROXY_PORT = "1234"; // Proxy server port
$PROXY_USER = "LOGIN"; // Username
$PROXY_PASS = "PASSWORD"; // Password
// Username and Password are required only if your proxy server needs basic authentication

$auth = base64_encode("$PROXY_USER:$PROXY_PASS");
stream_context_set_default(
array(
'http' => array(
'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT",
'request_fulluri' => true,
'header' => "Proxy-Authorization: Basic $auth"
// Remove the 'header' option if proxy authentication is not required
)
)
);
//Your SoapServer here

或者尝试以非 WSDL 模式运行服务器

<?php
$server = new SoapServer(null, array('uri' => "http://localhost/namespace"));
$server->setClass('myClass');
$data = file_get_contents('php://input');
$server->handle($data);

关于php - 在代理后面运行 PHP SoapServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41187420/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com