我有一个PHP客户机,它需要连接到SOAP服务器:
$client = new \SoapClient('url_to_wsdl.wsdl', [
'local_cert' => 'path_to_certificate.pem',
'connection_timeout ' => 300,
'trace' => 1,
]);
$params = [];
$response = $client->executeAFunction($params);但是SOAP客户端无法连接到主机:SoapFault "Could not connect to host" (它实际上也不能加载wsdl文件,但我通过使用文件的本地副本来模拟)。
我意识到Soap客户端无法连接到主机,因为它在默认情况下似乎使用IPv6 (这是因为this answer on SO)。
到目前为止,我做了什么:
我的实际问题是:如何告诉Soap客户机使用IPv4连接到主机,而不是使用IPv6?
发布于 2018-01-15 11:58:26
SOAP请求是套接字连接,因此可以使用socket_context选项。使用stream_context_create()将请求绑定到指定的IP。
stream_context_create(['socket' => ['bindto' => '123.123.123.123:0']]);将0设置为端口号,这样PHP将自动设置它。
发布于 2020-10-12 16:30:45
与其绑定到特定的IPv4 IP地址,还可以用0替换IP地址。
stream_context_create(['socket' => ['bindto' => '0:0']]);强制IPv4为SoapClient的完整示例可能是:
$opts = array(
'http' => array(
'user_agent' => 'Your/UserAgent'
),
'socket' => ['bindto' => '0:0']
);
$context = stream_context_create($opts);
$soapClientOptions = array(
'stream_context' => $context,
'trace' => true,
);
$client = new SoapClient($wsdlUrl, $soapClientOptions);https://stackoverflow.com/questions/41382148
复制相似问题