无法使用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
答案 0 :(得分:3)
您不能在Coro中使用IO :: Socket :: INET或IO :: Socket :: IP。 Coro是一个协作式多线程系统,因此它仅与协作模块一起使用,并且这些模块都不支持Coro。 (通过“工作”,我的意思是允许线程和异步操作进行。)
除其他外,Coro :: LWP专门使Net :: HTTP使用Coro :: LWP :: Socket而不是IO :: Socket :: INET。您尝试使Net :: HTTP使用IO :: Socket :: IP适得其反。
您说您要切换模块是因为Clickhouse(我想您是说ClickHouse)不支持异步请求,但是用IO :: Socket :: IP代替IO :: Socket :: INET并没有帮助完全没有。
您看过AnyEvent::ClickHouse吗?