Domanda

Sono stato a giocherellare con il protocollo TCP / IP di rete in Gawk e sto attraversando un periodo difficile capire perché si comporta bene con alcuni siti, ma non per gli altri. Ho anche provato ad utilizzare intestazioni HTTP Live in Windows per provare e mettere a punto quello che sta succedendo, ma senza alcun risultato.

Il codice di esempio riportato di seguito Gawk (versione 3.1.5) funziona bene per il sito www.sobell.com ma si bloccherà 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)

}

Apprezzo tutto l'aiuto! Grazie a tutti.

È stato utile?

Soluzione

Il tuo codice (e il manuale gawk) utilizza l'obsoleto HTTP / 0.9 sintassi. A quanto pare il secondo server non supporta più questo. importanti differenze:

      
  • Le linee deve terminare con "\ r \ n" invece che a capo UNIX pianura.   
  • È necessario terminare la richiesta con una riga vuota.   
  • Aggiungi un tipo di versione (HTTP / 1.0 o HTTP / 1.1) fino alla fine della linea di richiesta.   
  • Di solito la stringa di richiesta non contiene il nome dell'host, questo viene messo su un "Host:" separata linea.

Il seguente codice funziona per 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)
}

È possibile trovare tutti i dettagli scabrosi in RFC 1945 (1.0) e RFC 2616 (1.1).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top