TCP Networking in Gawk Works für einige Adressen, andere aber nicht
Frage
Ich habe mit TCP / IP-Vernetzung in Gawk Hantieren und eine harte Zeit habe, herauszufinden, warum es mit einigen Standorten benimmt sich gut, aber nicht für andere. Ich habe sogar versucht, mit HTTP-Live-Headers in Windows, um zu versuchen und zu debuggen, was los ist, aber ohne Erfolg.
Die Probe Gawk Code (Version 3.1.5) wird gut für die Arbeit vor Ort www.sobell.com sondern hängen an 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)
}
Ich schätze jede Hilfe! Dank Alle.
Lösung
Ihr Code (und die gaffen Handbuch) verwendet die veraltete HTTP / 0.9-Syntax. Anscheinend ist der zweite Server nicht mehr unterstützt dies. Wichtige Unterschiede:
- Die Leitungen müssen mit "\ r \ n" end anstelle von einfacher UNIX newlines.
- Sie müssen Ihre Anfrage mit einer leeren Zeile enden.
- Fügen Sie eine Version Typ (HTTP / 1.0 oder HTTP / 1.1) bis zum Ende der Anforderungsleitung.
- Üblicherweise wird die Anfrage-String nicht den Hostnamen enthält, wird diese auf einem separaten „Host:“ put Linie.
Der folgende Code funktioniert für mich:
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)
}
Sie können alle blutigen Details in RFC 1945 (1.0) und RFC 2616 (1.1).