繁体   English   中英

json.dumps 中的额外 &/&/& 与 python 请求 package GET 请求

[英]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&param2=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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM