[英]Extra &/ampersand in json.dumps with python requests package GET Request
我想使用 python requests
package 对公共 api 执行简单的获取请求。 我正在使用请求 2.25.1 和 python 3.6。
不幸的是,URL 参数有一个额外的&
预定义,我无法弄清楚它来自哪里。 下面的示例代码带有错误的 url 和正确的 url 删除&符号。
import requests
import json
URL="https://search.rcsb.org/rcsbsearch/v1/query?json="
JSON={
"query": {
"type": "terminal",
"service": "text",
"parameters": { "value": "thymidine kinase" }
},
"return_type": "entry"
}
r=requests.get(url = URL,params=json.dumps(JSON, separators=(',', ':')))
r.url
then is https://search.rcsb.org/rcsbsearch/v1/query?json=&%7B%22query%22:%7B%22type%22:%22terminal%22,%22service%22:%22text%22,%22parameters%22:%7B%22value%22:%22thymidine%20kinase%22%7D%7D,%22return_type%22:%22entry%22%7D
这会产生 500 错误。
如果将json=&%7
更改为json=%7
请求有效。 我怎样才能摆脱多余的&符号?
https://search.rcsb.org/rcsbsearch/v1/query?json=%7B%22query%22:%7B%22type%22:%22terminal%22,%22service%22:%22text%22,%22parameters%22:%7B%22value%22:%22thymidine%20kinase%22%7D%7D,%22return_type%22:%22entry%22%7D
问题是您都在尝试对requests.get
使用params
关键字参数,并且您正在尝试自己构建参数字符串。 因为?
在您的 URL 中,底层 url 操作代码假定已经有参数并使用&
添加新参数(如someurl?param1=foo¶m2=bar...
)。
选择一种机制或另一种机制,例如:
import json
import requests
URL="https://search.rcsb.org/rcsbsearch/v1/query"
JSON={
"query": {
"type": "terminal",
"service": "text",
"parameters": { "value": "thymidine kinase" }
},
"return_type": "entry"
}
r=requests.get(url = URL,params={'json': json.dumps(JSON, separators=(',', ':'))})
print(r)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.