我必须使用get参数"范围" "范围:priavte范围"
使用python的requets模块
范围参数的注意值必须以空格分隔。
url_1 = "https://www.testapp.com/oauth/authorize/"
payload = {"scope": "scope:private scope:public", "client_id"=xxx}
>> req = requests.get(url_1, params=payload)
>> url
>>https://www.testapp.com/oauth/authorize/?scope=scope%3Aprivate+scope%3Apublic&client_id=XXX
>> req.status_code
400
此网址有效
url_2 = "https://www.testapp.com/oauth/authorize/?client_id=xxx&scope=scope:public%20scope:private"
>> req = requests.get(url_2)
>> req.status_code
200
两个网址之间的差异在于范围获取参数值"scope:private scope:public"
的编码方式。
url_1使用%3A for : and + for space
而url_2使用: is not encoded and %20 for space
如何通过url_1
成功提出请求?
答案 0 :(得分:0)
我不知道是否有一种聪明的方法可以做到这一点......我想也许有一些请求挂钩,但似乎无法挂钩请求。
但是,您可以使用urllib.quote()
指定:
作为安全字符,然后将其作为字符串传递给requests.get()
来手动执行此操作:
import urllib
import requests
payload = {"scope": "scope:private scope:public", "client_id": "xxx"}
query_string = '&'.join(['='.join((k, urllib.quote(v, ':'))) for k,v in payload.items()])
req = requests.get(url_1, params=query_string)
生成的查询字符串如下所示:
>>> print query_string
scope=scope:private%20scope:public&client_id=xxx