Gawk中的TCP网络适用于某些地址,但不适用于其他地址

Gawk中的TCP网络适用于某些地址,但不适用于其他地址,tcp,awk,gawk,Tcp,Awk,Gawk,我一直在Gawk中摆弄TCP/IP网络,我很难弄明白为什么它在某些网站上表现良好,但在其他网站上却表现不好。我甚至尝试在Windows中使用HTTP Live标头来尝试和调试正在发生的事情,但没有效果 下面的示例Gawk代码(版本3.1.5)在网站www.sobell.com上运行良好,但会挂在www.drudgreport.com上 BEGIN { print "Dumping HTML of www.sobell.com" server = "/inet/tcp/0/www.sobell.

我一直在Gawk中摆弄TCP/IP网络,我很难弄明白为什么它在某些网站上表现良好,但在其他网站上却表现不好。我甚至尝试在Windows中使用HTTP Live标头来尝试和调试正在发生的事情,但没有效果

下面的示例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)

}
谢谢你的帮助!谢谢大家。

您的代码(以及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)
}

你可以在(1.0)和(1.1)中找到所有血淋淋的细节。

你为什么要使用gawk?为什么不试试Python或Perl呢?如果没有,请参阅
info gawkinet
。我知道Python和Perl可以做到这一点,我想知道如何在Gawk中做到这一点。仅仅因为Python和Perl可以做到这一点,并不意味着Gawk是坏的和无用的。丹尼斯,谢谢,我已经阅读了该文档——坦率地说,几乎是唯一真正的inet文档——但我会再次阅读它,希望我错过了某个地方的警告。很棒的schot,工作非常完美。奇怪的是,我读到的gawkinet(3.1及更高版本)提到当前的HTTP是1.1,但没有用您的方法编写示例代码。哦,很高兴它能工作!