Heim  >  Artikel  >  Backend-Entwicklung  >  Was passiert, wenn Python eine Post-Anfrage mit Headern sendet?

Was passiert, wenn Python eine Post-Anfrage mit Headern sendet?

WBOY
WBOYOriginal
2016-08-04 09:19:502121Durchsuche

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>

Antwortinhalt:

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>

Wie man die Parameter von urlopen übergibt, kann im Handbuch nachgelesen werden
Was passiert, wenn Python eine Post-Anfrage mit Headern sendet?

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

übergeben

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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn