Bienvenido a nuestro espacio, en este sitio hallarás la solucíon que estás buscando.
Solución:
No puede utilizar requests
para esto; la biblioteca construye tales URL si se pasa una estructura de Python para los parámetros, pero no ofrece ninguna herramienta para analizarlos. Ese no es un objetivo del proyecto.
Quédate con el urllib.parse
método para analizar los parámetros. Una vez que tenga un diccionario o una lista de key-tuplas de valor, solo pásalo a requests
para construir la URL de nuevo:
try:
# Python 3
from urllib.parse import urlparse, parse_qs
except ImportError:
# Python 2
from urlparse import urlparse, parse_qs
o = urlparse(url)
query = parse_qs(o.query)
# extract the URL without query parameters
url = o._replace(query=None).geturl()
if 'token' in query:
query['token'] = 'NEW_TOKEN'
requests.get(url, params=query)
Puedes conseguir tanto el urlparse
y parse_qs
funciona tanto en Python 2 como en 3, todo lo que necesita hacer es ajustar la ubicación de importación si obtiene una excepción.
Demostración en Python 3 (sin la protección de excepción de importación) para demostrar que se ha creado la URL:
>>> from urllib.parse import urlparse, parse_qs
>>> url = "http://httpbin.org/get?token=TOKEN_TO_REPLACE¶m2=c"
>>> o = urlparse(url)
>>> query = parse_qs(o.query)
>>> url = o._replace(query=None).geturl()
>>> if 'token' in query:
... query['token'] = 'NEW_TOKEN'
...
>>> response = requests.get(url, params=query)
>>> print(response.text)
"args":
"param2": "c",
"token": "NEW_TOKEN"
,
"headers":
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.5.1 CPython/3.4.2 Darwin/14.1.0"
,
"origin": "188.29.165.245",
"url": "http://httpbin.org/get?token=NEW_TOKEN¶m2=c"
Utilizando requests
solamente:
query = requests.utils.urlparse(url).query
params = dict(x.split('=') for x in query.split('&'))
if 'token' in params:
params['token'] = 'NEW_TOKEN'
requests.get(url, params=params)
Si conservas algún reparo o forma de modernizar nuestro sección eres capaz de dejar una crítica y con placer lo ojearemos.