我试图使用IO :: Socket :: INET连接到Web服务(是的,我知道有很多更好的模块可以做到这一点,没有它们,不能添加它们,所以请不要提示它),但是我正在等待(等待响应)。IO :: Socket获取响应时超时
这里是我的代码的基本症结(我以前填充所有适当的标题的内容,并对其进行设置等):
$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>
更混乱。
在此先感谢。
是的,这与我所拥有的非常接近。进一步的调查让我相信这是一种EOF问题。如果我使用'getline()'(在一个循环中),它会抓取最后一行。如果我使用'recv()',它将获得除最后一位以外的所有数据。这些帮助有用? – Morinar 2009-10-02 18:22:09
我也在执行POST而不是HEAD或GET。不知道这是否有什么区别... – Morinar 2009-10-02 18:26:32
您的示例也适用于我,但是如果您将HTTP/1.0更改为HTTP/1.1(这是我使用的),您的示例与我的一样挂起。 HTML/1.0和HTML/1.1有什么区别? – Morinar 2009-10-02 18:43:24