提问人:Michael2000 提问时间:10/12/2023 最后编辑:Michael2000 更新时间:10/12/2023 访问量:98
Perl Mojolicious,Mojo::UserAgent 使用 IPv4
Perl Mojolicious, Mojo::UserAgent use IPv4
问:
我怎样才能告诉我的 Mojolicious 只使用 IPv4,这是否可能?Mojo::UserAgent
(类似于:wget --inet4-only https://blabli.com
)
我需要这个的原因是,在我使用此代理的 Openshift Cluster 中,IPv6 不起作用。
答:
8赞
Rawley Fowler
10/12/2023
#1
您可以使用 IO::Socket::IP
模块强制使用 ipv4 添加到用户代理套接字。socket_options
use Mojo::UserAgent;
use IO::Socket::IP -register;
# PF_INET -> ipv4
# PF_INET6 -> ipv6
my $ua = Mojo::UserAgent->new(socket_options => { Domain => PF_INET });
print $ua->get("www.google.com")->result->body; # Uses ipv4
评论
0赞
Michael2000
10/13/2023
我尝试了你的代码,我仍然得到相同的行为,但至少现在我可以假设 Mojo:UserAgent 在 IPv4 上工作。仍然不知道为什么我在 wget 中出现 120 秒延迟 “--inet4-only” 解决了问题 wget some-service-in-other-openshift-cluster-which-have-some-network... (延迟 120 秒) wget --inet4-only some-service-in-other-openshift-cluster-which-have-some-network... (工作正常)
0赞
Michael2000
10/13/2023
perl code_sniped_from_rawley_fowler_ipv4.pl # MOJO_CLIENT_DEBUG=1 以此类推,没有任何延迟-- Blocking request (https://some-service-in-other-openshift-cluster-which-have-some-network-issues.com/some-path) -- Connect 2dcd0a5f96d41c9c82c2d03672272bd5 (https://some-service-in-other-openshift-cluster-which-have-some-network-issues.com:443 (DELAY 120 SECONDS) -- Client >>> Server (https://some-service-in-other-openshift-cluster-which-have-some-network-issues.com/some-path) GET /some-path HTTP/1.1\x0d Accept-Encoding: gzip\x0d
2赞
Rawley Fowler
10/13/2023
如果您有其他问题,请提出新问题。
评论
MOJO_*
MOJO_NO_IPV4
MOJO_NO_IPV6