如何拆分Python请求获取参数?

时间:2017-07-13 03:43:38

标签: python python-requests

我在使用python请求get时如何从url中拆分参数需要帮助。

假设我有这个网址

https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D

我通过

做了requests.get
_get = requests.get("https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D", headers={"Authorization":"MyToken 1234abcd"})

我使用_get.url进行了检查,然后返回

u'https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D'

然后我尝试使用以下内容来拆分参数

url = "https://blabla.io/bla1/blas/blaall/messages"
query = {"data[]":[{"limit_count":100, "limit_size":100}]}
headers = {"Authorization":"MyToken 1234abcd"}
_get = requests.get(url, params=query, headers=headers)

_get.url返回以下结果

u'https://blabla.io/bla1/blas/blaall/messages?data%5B%5D=limit_count&data%5B%5D=limit_size'

没有10010000

在这种网址中 - > https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D,究竟如何拆分其参数?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

所以你在寻找:

data={"limit_count":100,"limit_size":1000}

作为您的查询参数。

不幸的是,requests不会展平此嵌套结构,它会将任何Iterable值视为密钥的多个值,例如您的嵌套字典被视为:

query = {'data': ['limit_count', 'limit_size']}

这就是为什么你在最终结果中看不到1001000的原因。

您需要将其展平为一个字符串。您可以使用json.dumps()创建所需的字符串(双引号与单引号,紧凑)。然后requests将执行所需的URL编码,例如:

In []:
data = {'limit_count': 100, 'limit_size': 1000}
query = {'data': json.dumps(data, separators=(',', ':'))}
request.get('http://httpbin.org', params=query).url

Out[]:
'http://httpbin.org/?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D'

答案 1 :(得分:0)

from urllib.parse import urlsplit, parse_qs
import requests
url = "https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D"
query = urlsplit(url).query
params = parse_qs(query)
headers = {"Authorization":"MyToken 1234abcd"}
_get = requests.get(url, params=params, headers=headers)

答案 2 :(得分:0)

据我所知,您无法使用requests库来解析网址。

您可以使用它来处理请求。如果您需要URL解析器,请改用urllib.parse