Сеть TCP в Gawk работает для некоторых адресов, но не для других - PullRequest
1 голос
/ 31 августа 2010

Я возился с сетью TCP / IP в Gawk и с трудом выясняю, почему она работает хорошо на некоторых сайтах, но не на других.Я даже пытался использовать HTTP Live Headers в Windows, чтобы попытаться отладить происходящее, но безрезультатно.

Пример кода 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 Ответ

2 голосов
/ 01 сентября 2010

Ваш код (и руководство 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).

...