GET请求的URL参数

时间:2014-12-19 12:29:56

标签: python python-requests

我必须使用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成功提出请求?

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