我正在尝试使用 IO::Socket::INET 连接到 Web 服务(是的,我知道有很多更好的模块可以做到这一点,但我没有它们也无法添加它们,所以请不建议这样做),但我正在超时(我认为这就是它正在做的事情)等待回应。
这是我的代码的基本症结(我之前用所有正确的标题填充内容,并设置它等):
$httpSock->print($content);
my @lines = $httpSock->getlines();
foreach my $line ( @lines ) {
print $line;
}
看来我的请求是立即提出的,然后等待大约 2 分钟,然后才吐回响应。如果我更改代码以使用原始套接字
recv
而不是 getlines()
,阿拉:$httpSock->recv($data, 1024);
我立即得到响应(尽管只有前 1024 个字符)。我在这里做错了吗?我使用的 IO::Socket 版本足够晚,
autoflush
默认情况下应该启用,但显式打开它似乎没有任何区别。我也可以继续从套接字读取,直到得到整个响应,但这绝对比使用 getlines()
更困惑。或 <$httpSock>
.提前致谢。
最佳答案
我在使用您发布的代码片段重新创建问题时遇到问题。这是我测试的代码:
use strict;
use warnings;
use IO::Socket;
my $httpSock = new IO::Socket::INET(
PeerAddr => 'www.google.com',
PeerPort => '80',
Proto => 'tcp',
);
my $content = "HEAD / HTTP/1.0\r\nHost: www.google.com\r\n\r\n";
$httpSock->print($content);
my @lines = $httpSock->getlines();
foreach my $line (@lines) {
print $line;
}
结果如下:
$ time ./1.pl
HTTP/1.0 200 OK
-snip-
real 0m0.084s
user 0m0.025s
sys 0m0.007s
关于perl - 得到响应时 IO::Socket 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1510789/