1

我一直在 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)

}

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

4

1 回答 1

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)中找到所有血淋淋的细节。

于 2010-09-01T06:32:13.910 回答