python - json.dumps 中的额外 &/ampersand 与 python 请求包 GET 请求
问题描述
我想使用 pythonrequests
包对公共 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
然后是
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
解决方案
问题是您都在尝试使用params
关键字参数,requests.get
并且您正在尝试自己构建参数字符串。由于在您的 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)
推荐阅读
- c# - 我想使用本地 url 作为 http url 链接
- asp.net - SignalR Javascript 客户端错误:未生成动态文件
- google-bigquery - 找不到 BigQuery 公共数据集 (`bigquery-public-data`)
- amcharts - AmCharts AmMap - 设置缩放动作的起始位置
- swift - swift 逻辑运算符有序
- c++ - 将传感器数据发布给制图师
- image - JavaFX如何为多个纵横比裁剪图像一次
- r - 用于 R-Studio 的 Web 抓取数据
- ios - 子类化可编码类
- r - 使用 knitr 获取来自 R 的错误消息,因为它们本机出现在 R 会话中