json.dumps中的额外&/ampersand和python请求包GET Request

2024-05-16 11:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用python requests包对公共api执行一个简单的get请求。 我使用的是requests 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然后是 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


Tags: httpsorgimportjsonurlsearchgetservice
1条回答
网友
1楼 · 发布于 2024-05-16 11:25:43

问题是您都试图使用params关键字参数来requests.get并且您试图自己构建参数字符串。由于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)

相关问题 更多 >