Perl Mojolicious,Mojo::UserAgent 使用 IPv4

Perl Mojolicious, Mojo::UserAgent use IPv4

提问人:Michael2000 提问时间:10/12/2023 最后编辑:Michael2000 更新时间:10/12/2023 访问量:98

问:

我怎样才能告诉我的 Mojolicious 只使用 IPv4,这是否可能?Mojo::UserAgent

(类似于:wget --inet4-only https://blabli.com)

我需要这个的原因是,在我使用此代理的 Openshift Cluster 中,IPv6 不起作用。

Perl IPv4 mojolicious mojo-useragent

评论

0赞 jqurious 10/12/2023
我试图找到所有变量的列表,但它似乎不存在。我以为可能有一个/(没有) - 如果你在这里没有收到反馈,你可能需要直接询问:docs.mojolicious.org/#SUPPORTMOJO_*MOJO_NO_IPV4MOJO_NO_IPV6
3赞 Steffen Ullrich 10/12/2023
如果这不起作用,您不能将系统配置为根本不全局使用 IPv6 吗?可能比尝试在每个应用程序中解决要好。有关名称解析的设置,请参见 gai.conf
0赞 brian d foy 10/13/2023
OP 还询问了 LWP:stackoverflow.com/questions/77279177/perl-lwpuseragent-use-ipv4
1赞 brian d foy 10/13/2023
您是否遇到 Mojo::UserAgent 在想要解析名称时获取 IPv6 地址的问题?如何解析主机名?
0赞 Michael2000 10/13/2023
@SteffenUllrich尝试一下,这需要一些时间,因为我没有那个 mashine 的运行时的 root 权限,但我会尝试一下。

答:

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
如果您有其他问题,请提出新问题。