Heim > Artikel > Backend-Entwicklung > Was passiert, wenn Python eine Post-Anfrage mit Headern sendet?
Ich möchte eine Anfrage mit dem Header headers
senden. Warum wird ein Fehler gemeldet?
<code>Traceback (most recent call last): File "D:\python\get-email-by-tieba.py", line 49, in <module> main() File "D:\python\get-email-by-tieba.py", line 6, in main getThreadByTid() File "D:\python\get-email-by-tieba.py", line 36, in getThreadByTid req = urllib2.urlopen(url, post_data, headers) File "C:\Python27\lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 391, in open response = self._open(req, data) File "C:\Python27\lib\urllib2.py", line 409, in _open '_open', req) File "C:\Python27\lib\urllib2.py", line 369, in _call_chain result = func(*args) File "C:\Python27\lib\urllib2.py", line 1173, in http_open return self.do_open(httplib.HTTPConnection, req) File "C:\Python27\lib\urllib2.py", line 1142, in do_open h.request(req.get_method(), req.get_selector(), req.data, headers) File "C:\Python27\lib\httplib.py", line 946, in request self._send_request(method, url, body, headers) File "C:\Python27\lib\httplib.py", line 987, in _send_request self.endheaders(body) File "C:\Python27\lib\httplib.py", line 940, in endheaders self._send_output(message_body) File "C:\Python27\lib\httplib.py", line 803, in _send_output self.send(msg) File "C:\Python27\lib\httplib.py", line 755, in send self.connect() File "C:\Python27\lib\httplib.py", line 736, in connect self.timeout, self.source_address) File "C:\Python27\lib\socket.py", line 557, in create_connection sock.settimeout(timeout) File "C:\Python27\lib\socket.py", line 222, in meth return getattr(self._sock,name)(*args)</code>
Ich möchte eine Anfrage mit dem Header headers
senden. Warum wird ein Fehler gemeldet?
<code>Traceback (most recent call last): File "D:\python\get-email-by-tieba.py", line 49, in <module> main() File "D:\python\get-email-by-tieba.py", line 6, in main getThreadByTid() File "D:\python\get-email-by-tieba.py", line 36, in getThreadByTid req = urllib2.urlopen(url, post_data, headers) File "C:\Python27\lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 391, in open response = self._open(req, data) File "C:\Python27\lib\urllib2.py", line 409, in _open '_open', req) File "C:\Python27\lib\urllib2.py", line 369, in _call_chain result = func(*args) File "C:\Python27\lib\urllib2.py", line 1173, in http_open return self.do_open(httplib.HTTPConnection, req) File "C:\Python27\lib\urllib2.py", line 1142, in do_open h.request(req.get_method(), req.get_selector(), req.data, headers) File "C:\Python27\lib\httplib.py", line 946, in request self._send_request(method, url, body, headers) File "C:\Python27\lib\httplib.py", line 987, in _send_request self.endheaders(body) File "C:\Python27\lib\httplib.py", line 940, in endheaders self._send_output(message_body) File "C:\Python27\lib\httplib.py", line 803, in _send_output self.send(msg) File "C:\Python27\lib\httplib.py", line 755, in send self.connect() File "C:\Python27\lib\httplib.py", line 736, in connect self.timeout, self.source_address) File "C:\Python27\lib\socket.py", line 557, in create_connection sock.settimeout(timeout) File "C:\Python27\lib\socket.py", line 222, in meth return getattr(self._sock,name)(*args)</code>
Wie man die Parameter von urlopen übergibt, kann im Handbuch nachgelesen werden
Die Antworten der Leute unten sind ungenau. Der Fehler besteht darin, dass der Schlüssel zu den Parametern urllib2.open(url,data=data,headers=header) hinzugefügt werden muss
Ich habe so viele Titel gepostet, aber es gibt keinen Fehler beim Posten.
Aktualisiert, um die Antwort von @Yunyu zu ergänzen. , aber der Grund, warum Header übergeben werden können und in der Form von headers= geschrieben werden müssen, liegt darin, dass das Schreiben auf diese Weise dem Schreiben eines Diktats und dessen anschließender Verarbeitung in ein Anforderungsobjekt und der Übergabe an urlopen ähnelt. Und wenn es wahr ist, dass der Header-Parameter nicht verarbeitet werden kann, wird auch der Fehler „typeerror: urlopen got an unerwartete Keyword-Argument-Header“ gemeldet, also habe ich gesagt, dass Sie viele Tracebacks gepostet haben, aber den im gemeldeten Fehler nicht gepostet haben letzte Zeile.
Der Parameter wurde falsch übergeben
Wenn Sie das Handbuch durchsehen, werden Sie wissen, dass der dritte Parameter von urlopen von urllib2 keine Header sind und es überhaupt keinen Header-Parameter gibt.
Konstruieren Sie dann den dritten Parameter von Das Request-Objekt von urllib2 sind die Header. Sie müssen also zuerst ein Request-Objekt erstellen und dann das Request-Objekt als Parameter von urllib2.urlopen
Für urllib2 müssen Sie einen Anforderungsheader hinzufügen und ihn wie folgt schreiben
<code>request = urllib2.Request(uri) request.add_header('User-Agent', 'fake-client') response = urllib2.urlopen(request)</code>
Die Art und Weise, wie die Frage geschrieben ist, ist falsch. Ich schlage vor, dass Sie einen Blick auf die Anforderungsbibliothek werfen. Die Art und Weise, wie sie geschrieben ist, ist einfacher zu verwenden.
Es wird empfohlen, Anfragen zu verwenden
<code>import requests url = '' data = {} headers = {} g = requests.get(url, data=data, headers=headers) p = requests.post(url, data=data, headers=headers) print g.text, p.text</code>