【发布时间】:2019-10-14 23:05:03
【问题描述】:
卡在使用 Net::HTTP 当我创建一个 Net::HTTP 对象时,它使用“IO::Socket::IP”进行初始化。 如何在没有硬编码的情况下更改默认套接字?我想把它改成 IO::Socket::INET。
所以,如果我对套接字进行硬编码,它就可以工作。 但是当我尝试使用 Coro::LWP 并且 Coro::LWP 将 IO::Socket::INET 更改为 Coro::Socket 时出现错误:
状态读取失败:传输端点未在 perl5/lib/perl5/Net/HTTP/Methods.pm 第 282 行连接。
我需要更改套接字,因为 cpan 上的 Clickhouse 模块不支持异步请求。
这是无效的代码
use IO::Socket::INET qw( );
BEGIN { $Net::HTTP::SOCKET_CLASS = 'IO::Socket::INET'; };
use Coro::LWP;
my $s = Net::HTTP->new(Host => "www.perl.com") || die $@;
$s->write_request(GET => "/");
print $_ for ( $s->read_response_headers );
已修复! 只需将 Coro::Socket 更改为 Coro::PatchSet::Socket
【问题讨论】:
-
这看起来像XY problem。描述您尝试解决的原始问题 X 可能更有用,而不是仅从您尝试解决问题 Y 的尝试中传递一些 sn-ps 以尝试解决 X。另请参阅 How to create a Minimal, Reproducible Example。
-
我写了LWP::Protocol::AnyEvent::http,我会在 Coro::LWP 上使用它。也就是说,ClickHouse 不使用 LWP?!?
标签: perl sockets asynchronous net-http