parse - url unquote python 3
¿Cómo evitar que las solicitudes de Python codifiquen mis URL? (5)
En caso de que alguien más lo descubra en el futuro, puede crear una subclase de solicitudes. Sesión, anular el método de envío y alterar la url sin procesar para corregir el porcentaje de codificaciones y similares. Las correcciones a continuación son bienvenidas.
import requests, urllib
class NoQuotedCommasSession(requests.Session):
def send(self, *a, **kw):
# a[0] is prepared request
a[0].url = a[0].url.replace(urllib.quote(","), ",")
return requests.Session.send(self, *a, **kw)
s = NoQuotedCommasSession()
s.get("http://somesite.com/an,url,with,commas,that,won''t,be,encoded.")
Estoy tratando de obtener una URL del siguiente formato usando requests.get () en python:
http://api.example.com/export/?format=json&key=site:dummy+type:example+group:wheel
#!/usr/local/bin/python
import requests
print(requests.__versiom__)
url = ''http://api.example.com/export/''
payload = {''format'': ''json'', ''key'': ''site:dummy+type:example+group:wheel''}
r = requests.get(url, params=payload)
print(r.url)
Sin embargo, la URL se codifica en porcentaje y no obtengo la respuesta esperada.
2.2.1
http://api.example.com/export/?key=site%3Adummy%2Btype%3Aexample%2Bgroup%3Awheel&format=json
Esto funciona si paso la URL directamente:
url = http://api.example.com/export/?format=json&key=site:dummy+type:example+group:wheel
r = requests.get(url)
¿Hay alguna forma de pasar los parámetros en su forma original, sin el porcentaje de codificación?
¡Gracias!
La solución, tal como fue diseñada, es pasar la URL directamente.
Las respuestas anteriores no funcionaron para mí.
Estaba tratando de hacer una solicitud de obtención donde el parámetro contenía una canalización, pero las solicitudes de Python también codificarían el porcentaje. Así que en su lugar usé urlopen:
# python3
from urllib.request import urlopen
base_url = ''http://www.example.com/search?''
query = ''date_range=2017-01-01|2017-03-01''
url = base_url + query
response = urlopen(url)
data = response.read()
# response data valid
print(response.url)
# output: ''http://www.example.com/search?date_range=2017-01-01|2017-03-01''
No es una buena solución pero puedes usar una string
:
r = requests.get(url, params=''format=json&key=site:dummy+type:example+group:wheel'')
Por cierto:
payload = {''format'': ''json'', ''key'': ''site:dummy+type:example+group:wheel''}
payload_str = "&".join("%s=%s" % (k,v) for k,v in payload.items())
# ''format=json&key=site:dummy+type:example+group:wheel''
r = requests.get(url, params=payload_str)
Por favor, eche un vistazo a la primera opción en este enlace github . Puede ignorar la parte urlib
que significa prep.url = url
lugar de prep.url = url + qry