首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于IPv4的PHP客户端

基于IPv4的PHP客户端
EN

Stack Overflow用户
提问于 2016-12-29 14:59:04
回答 2查看 1.7K关注 0票数 1

我有一个PHP客户机,它需要连接到SOAP服务器:

代码语言:javascript
复制
$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)。

到目前为止,我做了什么:

  • 我已经禁用了服务器(ubuntu)上的IPv6,但这并没有将任何东西更改为SOAP客户机。
  • 我通过服务器终端再次检查了IPv4和IPv6上的网站的可访问性。 $curl-6 http://v6.testmyipv6.com/ curl:(6)无法解析主机: v6.testmyipv6.com $curl-4 http://v4.testmyipv6.com/ IPv6 Test和双堆栈测试用于网络连接#上述命令对我测试过的所有urls都是正确的

我的实际问题是:如何告诉Soap客户机使用IPv4连接到主机,而不是使用IPv6?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-15 11:58:26

SOAP请求是套接字连接,因此可以使用socket_context选项。使用stream_context_create()将请求绑定到指定的IP。

代码语言:javascript
复制
stream_context_create(['socket' => ['bindto' => '123.123.123.123:0']]);

0设置为端口号,这样PHP将自动设置它。

票数 1
EN

Stack Overflow用户

发布于 2020-10-12 16:30:45

与其绑定到特定的IPv4 IP地址,还可以用0替换IP地址。

代码语言:javascript
复制
stream_context_create(['socket' => ['bindto' => '0:0']]);

强制IPv4为SoapClient的完整示例可能是:

代码语言:javascript
复制
$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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41382148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档