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

发布于 2024-09-16 09:53:24 字数 677 浏览 3 评论 0原文

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

}

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

I've been fiddling with TCP/IP networking in Gawk and am having a hard time figuring out why it behaves well with some sites but not for others. I've even tried using HTTP Live Headers in Windows to try and debug what's going on, but to no avail.

The sample Gawk code below (Version 3.1.5) will work fine for the site www.sobell.com but will hang on 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)

}

I appreciate any help! Thanks All.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城花音 2024-09-23 09:53:24

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

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

以下代码对我有用:

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)。

Your code (and the gawk manual) uses the outdated HTTP/0.9 syntax. Apparently the second server no longer supports this. Important differences:

  • The lines must end with "\r\n" instead of plain UNIX newlines.
  • You must end your request with an empty line.
  • Add a version type (HTTP/1.0 or HTTP/1.1) to the end of the request line.
  • Usually the request string does not contain the hostname, this is put on a separate "Host: " line.

The following code works for me:

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)
}

You can find all the gory details in RFC 1945 (1.0) and RFC 2616 (1.1).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文