Gawk中的TCP网络工作用于某些地址而不是其他地址

时间:2010-08-31 19:06:05

标签: tcp awk gawk

我一直在使用Gawk中的TCP / IP网络,并且很难弄清楚为什么它在某些网站上表现良好而在其他网站上表现不佳。我甚至尝试在Windows中使用HTTP Live Headers来尝试调试正在发生的事情,但无济于事。

下面的示例Gawk代码(版本3.1.5)适用于网站www.sobell.com,但会挂在www.drudgreport.com上。

BEGIN {
print "Dumping HTML of www.sobell.com"

server = "/inet/tcp/0/www.sobell.com/80"
print "GET http://www.sobell.com" |& server
while ((server |& getline) > 0)
    print $0
close(server)

print "Dumping HTML of www.drudgereport.com"

server = "/inet/tcp/0/www.drudgereport.com/80"
print "GET http://www.drudgereport.com" |& server
while ((server |& getline) > 0)
    print $0
close(server)

}

我感谢任何帮助!谢谢大家。

1 个答案:

答案 0 :(得分:2)

您的代码(和gawk手册)使用过时的HTTP / 0.9语法。显然第二台服务器不再支持此功能。重要区别:

      
  • 这些行必须以“\ r \ n”结尾而不是普通的UNIX换行符。   
  • 您必须以空行结束您的请求。   
  • 在请求行的末尾添加版本类型(HTTP / 1.0或HTTP / 1.1)。   
  • 通常请求字符串不包含主机名,而是放在单独的“主机:”行中。

以下代码适用于我:

BEGIN {
    ORS = "\r\n"
    server = "/inet/tcp/0/www.drudgereport.com/80"
    print "GET / HTTP/1.1" |& server
    print "Host: www.drudgereport.com" |& server
    print "" |& server
    while ((server |& getline) > 0)
        print $0
    close(server)
}

您可以在RFC 1945(1.0)和RFC 2616(1.1)中找到所有血腥的详细信息。