我在使用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'
没有100
和10000
在这种网址中 - > https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D
,究竟如何拆分其参数?
感谢您的帮助。
答案 0 :(得分:1)
所以你在寻找:
data={"limit_count":100,"limit_size":1000}
作为您的查询参数。
不幸的是,requests
不会展平此嵌套结构,它会将任何Iterable
值视为密钥的多个值,例如您的嵌套字典被视为:
query = {'data': ['limit_count', 'limit_size']}
这就是为什么你在最终结果中看不到100
和1000
的原因。
您需要将其展平为一个字符串。您可以使用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
。