Mit %20 statt + für Raum in python query-Parameter
Ich geschrieben habe das folgende python-Skript mit python-requests (http://requests.readthedocs.org/en/latest/):
import requests
payload = {'key1': 'value 1', 'key2': 'value 2'}
headers = {'Content-Type': 'application/json;charset=UTF-8'}
r = requests.get("http://example.com/service", params=payload, headers=headers,
auth=("admin", "password"))
Wenn ich sehe, das access log des Servers, der eingehende request ist:
/service?key1=value++1&key2=value+2
Aber der server erwartet ...value%20%201&
...
Habe ich gelesen, dass mit einem + als Platzhalter für ein Leerzeichen ist Teil der content-type application/x-www-form-urlencoded, aber klar habe ich angefordert application/json.
Jemand weiß, wie man mit %20 als Leerzeichen in der Abfrage-Parameter der pythons Anfragen?
- Hast du jemals dieses Problem beheben? Hast du Sie einfach gehen mit
urllib
oder ändern Sie den server, oder was? - Ich weiß es ehrlich gesagt nicht mehr. Schon eine ganze Weile her, und ich habe keinen Zugriff auf die Quellen mehr
- Ich bin immer noch nicht auf diese als gut. Mist
- überprüfen Sie meine Antwort, die einfache Lösung ist zum überschreiben der das urllib.quote_pluse mit das urllib.Zitat
Du musst angemeldet sein, um einen Kommentar abzugeben.
Follow-up auf @WeaselFox die Antwort, Sie führte ein patch akzeptiert eine
quote_via
keyword argument zuurllib.parse.urlencode
. Nun könnte man dies tun:Können benutzen wir urllib2.Antrag zum Aufruf-url
PYTHON 2.7
Überschreiben der das urllib.quote_pluse mit das urllib.Zitat
Den urlencoder verwendet das urllib.quote_pluse um die Daten zu Kodieren.
code
Ausgabe
versuchen es.
http://docs.python.org/2/library/urllib.html#urllib.urlencode
Finde ich nur das urllib.analysiert werden können.Zitat , die ersetzen kann, Raum zu
%20
.Aber
quote
konnte nicht konvertieren dict.so, Wir müssen
quote
zu verwandeln dict im Voraus.dies scheint ein bekannter bug/Problem in python :
http://bugs.python.org/issue13866
Ich denke, dass Sie gehen, um dieses Problem mit
urllib
undurllib2
und vermeiden Sie Anfragen. Blick auf die bug-reports für einige Tipps, wie Sie das tun.