1

私は Gawk で TCP/IP ネットワーキングをいじっていますが、一部のサイトではうまく動作し、他のサイトではうまく動作しない理由を理解するのに苦労しています。Windows で HTTP ライブ ヘッダーを使用して、何が起こっているかをデバッグしようとしましたが、役に立ちませんでした。

以下のサンプル 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 構文を使用しています。明らかに、2 番目のサーバーはこれをサポートしなくなりました。重要な違い:

  • 行は、通常の UNIX 改行ではなく、"\r\n" で終わる必要があります。
  • リクエストは空行で終了する必要があります。
  • バージョン タイプ (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)ですべての悲惨な詳細を見つけることができます。

于 2010-09-01T06:32:13.910 に答える