首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python请求模块url编码

Python请求模块url编码
EN

Stack Overflow用户
提问于 2015-05-29 02:31:26
回答 1查看 40.5K关注 0票数 6

我尝试通过api的get方法将json作为参数发送,我发现它命中的url与原始url略有不同。在url之间插入了一些":%20“文本。不确定为什么会出现这种差异,有人能帮忙吗?

代码语言:javascript
复制
Original URL: http://258.198.39.215:8280/areas/0.1/get/raj/name?jsonRequest=%7B%22rajNames%22%3A%5B%22WAR%22%5D%7D

My URL : http://258.198.39.215:8280/areas/0.1/get/raj/name?jsonRequest=&%7B%22rajNames%22:%20%22WAR%22%7D

Python代码:

代码语言:javascript
复制
headers = {'Accept': 'application/json','Authorization': 'Bearer '+access_token}
json = {'rajNames':'WAR'}
url = 'http://258.198.39.215:8280/areas/0.1/get/raj/name?jsonRequest='
r = requests.get(url, params=json.dumps(json),headers=headers)
print _r.url
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-29 02:44:47

空格不是问题所在;生成查询字符串的方法才是问题所在,实际的JSON有效负载也是如此。

请注意,您的原始URL具有不同的 JSON结构:

代码语言:javascript
复制
>>> from urllib import unquote
>>> unquote('%7B%22rajNames%22%3A%5B%22WAR%22%5D%7D')
'{"rajNames":["WAR"]}'

rajNames参数是一个列表,而不是单个字符串。

接下来,requestsparams中的所有数据视为一个新参数,因此它使用&来分隔前一个参数。使用字典并将?jsonRequest=部件留给requests来生成:

代码语言:javascript
复制
headers = {'Accept': 'application/json', 'Authorization': 'Bearer '+access_token}
json_data = {'rajNames': ['WAR']}
params = {'jsonRequest': json.dumps(json_data)}
url = 'http://258.198.39.215:8280/areas/0.1/get/raj/name'
r = requests.get(url, params=params, headers=headers)
print _r.url

演示:

代码语言:javascript
复制
>>> import requests
>>> import json
>>> headers = {'Accept': 'application/json', 'Authorization': 'Bearer <access_token>'}
>>> json_data = {'rajNames': ['WAR']}
>>> params = {'jsonRequest': json.dumps(json_data)}
>>> url = 'http://258.198.39.215:8280/areas/0.1/get/raj/name'
>>> requests.Request('GET', url, params=params, headers=headers).prepare().url
'http://258.198.39.215:8280/areas/0.1/get/raj/name?jsonRequest=%7B%22rajNames%22%3A+%5B%22WAR%22%5D%7D'

您仍然可以通过将separators参数设置为(',', ':')来消除json.dumps()的JSON输出中使用的空格

代码语言:javascript
复制
>>> json.dumps(json_data)
'{"rajNames": ["WAR"]}'
>>> json.dumps(json_data, separators=(',', ':'))
'{"rajNames":["WAR"]}'

但我怀疑这是否真的有必要。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30514459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档