wake-up-neo.com

Python urllib2 Antwortheader

Ich versuche, den Antwortheader einer URL-Anforderung zu extrahieren. Wenn ich firebug zur Analyse der Antwortausgabe einer URL-Anforderung verwende, wird Folgendes ausgegeben:

Content-Type text/html

Wenn ich jedoch den Python-Code verwende:

urllib2.urlopen(URL).info()

die resultierende Ausgabe gibt Folgendes zurück:

Content-Type: video/x-flv

Ich bin neu in Python und in der Webprogrammierung im Allgemeinen. Jede hilfreiche Einsicht wird sehr geschätzt. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

Vielen Dank im Voraus für das Lesen dieses Beitrags

24
looter

Versuchen Sie es wie Firefox anzufordern. Sie können die Anforderungsheader in Firebug anzeigen. Fügen Sie sie also Ihrem Anforderungsobjekt hinzu:

import urllib2

request = urllib2.Request('http://your.tld/...')
request.add_header('User-Agent', 'some fake agent string')
request.add_header('Referer', 'fake referrer')
...
response = urllib2.urlopen(request)
# check content type:
print response.info().getheader('Content-Type')

Es gibt auch einen HTTPCookieProcessor, der es besser machen kann, aber ich glaube nicht, dass Sie es in den meisten Fällen brauchen werden. Schauen Sie sich die Dokumentation von python an:

http://docs.python.org/library/urllib2.html

36
qingbo

Inhaltstyp Text/HTML

Wirklich so ohne Dickdarm?

Wenn ja, könnte dies eine Erklärung sein: Es handelt sich um einen ungültigen Header, der ignoriert wird. Urllib rät stattdessen den Inhaltstyp. Wenn die URL am Ende ".flv" hat, wird angenommen, dass der Typ video/x-flv sein sollte.

5
bobince

Diese eigentümliche Diskrepanz könnte durch verschiedene Header (möglicherweise akzeptierte), die von den beiden Anforderungen gesendet werden, erklärt werden. Können Sie das überprüfen ...? Oder wenn Javascript in Firefox ausgeführt wird (was ich vermute, Sie verwenden Firebug?) - da es definitiv NICHT im Python-Fall ausgeführt wird - "Alle Wetten sind aus", wie sie sagen ;-) .

2
Alex Martelli

Beachten Sie, dass ein Webserver basierend auf den Unterschieden in der Anforderung unterschiedliche Ergebnisse für dieselbe URL zurückgeben kann. Beispiel: Aushandlung von Inhaltstypen: Der Anforderer kann eine Liste von Inhaltstypen angeben, die er akzeptieren wird, und der Server kann unterschiedliche Ergebnisse zurückgeben, um zu versuchen, unterschiedliche Anforderungen zu erfüllen.

Möglicherweise erhalten Sie auch eine Fehlerseite für eine Ihrer Anforderungen, zum Beispiel, weil diese fehlerhaft ist oder Sie keine Cookies gesetzt haben, die Sie ordnungsgemäß authentifizieren.

1
Ned Batchelder

gemäß http://docs.python.org/library/urllib2.html gibt es nur die get_header()-Methode und nichts über getheader.

Fragen, weil Ihr Code gut funktioniert 

response.info().getheader('Set cookie')

aber einmal ausführen 

response.info().get_header('Set cookie')

ich bekomme:

Traceback (most recent call last):
  File "baza.py", line 11, in <module>
    cookie = response.info().get_header('Set-Cookie')
AttributeError: HTTPMessage instance has no attribute 'get_header'

edit: Außerdem
response.headers.get('Set-Cookie') funktioniert ebenfalls gut, wird in urlib2 doc nicht erwähnt.

0
modzello86