Erhalte HEAD-Inhalt mit Python-Anfragen

9

Ich versuche, das Ergebnis einer HEAD-Anfrage zu analysieren, die mit Python Anfragen Bibliothek, aber scheint nicht auf den Inhalt der Antwort zuzugreifen.

Laut den Dokumenten sollte ich in der Lage sein, auf den Inhalt von requests.Response zuzugreifen. Text. Dies funktioniert für mich bei GET-Anfragen, gibt aber None bei HEAD-Anfragen zurück.

GET-Anfrage (funktioniert)

%Vor%

content = <html>...</html>

HEAD-Anfrage (kein Inhalt)

%Vor%

content = None

BEARBEITEN

OK Ich habe schnell festgestellt, dass die HEAD-Anfrage keine Content-Only-Header zurückgeben soll. Aber heißt das, dass, um auf Dinge zuzugreifen, die im <head> -Tag einer Seite gefunden wurden, wie <link> und <meta> -Tags, das man das ganze Dokument holen muss?

    
Yarin 04.03.2012, 12:44
quelle

3 Antworten

16

Nach der Definition enthalten die Antworten auf HEAD-Anfragen keine Nachricht -Körper.

Senden Sie eine GET-Anfrage, wenn Sie einen Antworttext erhalten möchten. Senden Sie eine HEAD-Anfrage Wenn Sie interessiert sind, sind Sie nur an dem Antwortstatuscode und den Kopfzeilen interessiert.

HTTP überträgt beliebigen Inhalt; Der HTTP-Begriff header ist völlig unabhängig von einem HTML-Code <head> . HTTP kann jedoch empfohlen werden, nur einen Teil des Dokuments herunterzuladen. Wenn Sie die Länge des Codes HTML <head> (oder eine obere Grenze dafür) kennen, können Sie ein HTTP-Bereich Header in Ihrer Anfrage, die den Remote-Server darauf hinweist, nur eine bestimmte Anzahl von Bytes zurückzugeben. Wenn der Remote-Server HTTP-Bereiche unterstützt, wird er die reduzierte Antwort liefern.

    
phihag 04.03.2012, 12:48
quelle
5

Ein HEAD hat keinen Inhalt! Probieren Sie response.headers - das ist wahrscheinlich der Ort, an dem die Aktion stattfindet. Eine HTTP HEAD-Anforderung ruft nicht das Element <head> der HTML-Antwort ab, die Sie von einer GET-Anforderung erhalten würden. Ich denke, das ist dein Fehler.

    
Spacedman 04.03.2012 12:48
quelle
2

HEAD Antworten haben keinen Körper. Sie geben nur HTTP-Header zurück, die Sie mit einer GET-Anfrage erhalten würden.

    
Dor Shemer 04.03.2012 12:49
quelle