Berechnen der Inhaltslänge mit Python
-
13-12-2019 - |
Frage
Ich versuche, einen Beitrag zu verfassen, erhalte jedoch jedes Mal einen 411-Antwortfehler.Ich verwende die Anforderungsbibliothek in Python.
In [1]: r.post(url)
Out[1]: <Response [411]>
Dann habe ich die Inhaltslänge angegeben h = {'content-length' : '0'}
und versuche es erneut.
In [2]: r.post(url,h)
Out[2]: <Response [200]>
Großartig, ich bekomme einen Erfolg, aber keine der Informationen wird veröffentlicht.
Ich denke, ich muss die Inhaltslänge berechnen, was Sinn macht, da es dazu führen könnte, dass der Beitrag „abgeschnitten“ wird.
Meine Frage ist also, ob eine URL gegeben ist www.example.com/import.php?key=value&key=value
Wie kann ich das berechnen? content-length
?(wenn möglich in Python)
Lösung
Es sieht seltsam aus, dass Sie es verwenden post
Methode ohne die data
Argument (aber Daten in die URL einfügen).
Schauen Sie sich das Beispiel aus dem an offizielle Anfragen Dokumentation :
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text
{
"origin": "179.13.100.4",
"files": {},
"form": {
"key2": "value2",
"key1": "value1"
},
"url": "http://httpbin.org/post",
"args": {},
"headers": {
"Content-Length": "23",
"Accept-Encoding": "identity, deflate, compress, gzip",
"Accept": "*/*",
"User-Agent": "python-requests/0.8.0",
"Host": "127.0.0.1:7077",
"Content-Type": "application/x-www-form-urlencoded"
},
"data": ""
}
Andere Tipps
Senden POST
Eine Anfrage mit leerem Textkörper ist völlig legal, solange die Content-Length
Der Header wird gesendet und auf gesetzt 0
. Anfragen Berechnen Sie normalerweise den Wert für Content-Length
Header.Das von Ihnen beobachtete Verhalten ist wahrscheinlich auf ein Problem zurückzuführen 223 - Inhaltslänge fehlt.Obwohl der Fehler nicht behoben ist, sieht es so aus, als ob das Problem behoben wurde:
C:\>python
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.__version__
'0.11.1'
>>> r = requests.post('http://httpbin.org/post?key1=valueA&key2=valueB')
>>> print r.content
{
"origin": "77.255.249.138",
"files": {},
"form": {},
"url": "http://httpbin.org/post?key1=valueA&key2=valueB",
"args": {
"key2": "valueB",
"key1": "valueA"
},
"headers": {
"Content-Length": "0",
"Accept-Encoding": "identity, deflate, compress, gzip",
"Connection": "keep-alive",
"Accept": "*/*",
"User-Agent": "python-requests/0.11.1",
"Host": "httpbin.org",
"Content-Type": ""
},
"json": null,
"data": ""
}