Pergunta

params = {'token': 'JVFQ%2FFb5Ri2aKNtzTjOoErWvAaHRHsWHc8x%2FKGS%2FKAuoS4IRJI161l1rz2ab7rovBzGB86bGsh8pmDVaW8jj6AiJ2jT2rLIyt%2Bbpm80MCOE%3D'}
rsp = requests.get("http://xxxx/access", params=params)
print rsp.url
print params

when print rsp.url, I get

http://xxxx/access?token=JVFQ%252FFb5Ri2aKNtzTjOoErWvAaHRHsWHc8x%252FKGS%252FKAuoS4IRJI161l1rz2ab7rovBzGB86bGsh8pmDVaW8jj6AiJ2jT2rLIyt%252Bbpm80MCOE%253D    
JVFQ%2FF
JVFQ%252FF

The value of the ?token= in the url is different from params['token'].
Why does it change?

Foi útil?

Solução

You passed in a URL encoded value, but requests encodes the value for you. As a result, the value is encoded twice; the % character is encoded to %25.

Don't pass in a URL-encoded value. Decode it manually if you must:

from urllib import unquote

params['token'] = unquote(params['token'])

Outras dicas

URL's use a special type of syntax. The % character is a reserved character in URLs. It is used as an escape character to allow you to type other characters (such as space, @, and % itself).

Requests automatically encodes URLs to proper syntax when necessary. The % key had to be econded to "%25". In other words, the URL parameters never changed. They are the same. The URL was just encoded to proper syntax. Everywhere you put "%" it was encoded to the proper form of "%25"

You can check out URL Syntax info here if you want: http://en.wikipedia.org/wiki/Uniform_resource_locator#Syntax

And you can encode/decode URLs here. Try encoding "%" or try decoding "%25" to see what you get: http://www.url-encode-decode.com/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top