Python的HTTP POST请求格式的表单数据
问题描述
我想发送一个HTTP POST请求的在线BLAST website。我检查了POST请求,并看到这个:Python的HTTP POST请求格式的表单数据
Request URL:https://p3.theseed.org/services/homology_service
Referrer Policy:no-referrer-when-downgrade
Request Headers
Provisional headers are shown
Accept:application/json
Content-Type:application/x-www-form-urlencoded
Origin:https://www.patricbrc.org
Referer:https://www.patricbrc.org/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Data
{"method":"HomologyService.blast_fasta_to_database","params":[">test
ATAGCTAACAGCATC","blastn","ref.fna","10",50,0],"version":"1.1","id":"27057295081137034"}:
现在我想做的事这为几个序列(因此替换ATAGCTAACAGCATC
)。我熟悉发送这些类型的请求,但我不知道现在怎么:
- 格式的
form data
,这样我就可以使用Requests - 我应该在后与
id
做些什么把它,因为我不知道这是因为它对于每一个BLAST工作都是独一无二的。
代码
import requests as r
blast_url = 'https://p3.theseed.org/services/homology_service'
data = {"method":"HomologyService.blast_fasta_to_database","params":["%3Etest%0ATAGCTAACAGCATC","blastp","ref.faa","10",'50','0'],"version":"1.1"}
headers = {
'Host': 'p3.theseed.org',
'Accept': 'application/json',
'Accept-Language': 'en-US,en;q=0.5',
'Referer': 'https://www.patricbrc.org/app/BLAST',
'Content-Type': 'application/rqlquery+x-www-form-urlencoded',
'X-Requested-With' : 'XMLHttpRequest'
}
res = r.post(blast_url, headers = headers, params = data).text
print(res)
我没有在id
填补,但这似乎并没有因为错误信息的ID填写是一个问题(这样看来?自动生成它) 这是错误我得到:
{"id":"15004153692662703","error":{"name":"JSONRPCError","code":-32700,"message":"You did not supply any JSON to parse in the POST body."},"version":"1.1"}
如此明显的表单数据的误格式化给出了这些亲blems,但我不知道我应该怎么格式化这个(以及这是否会解决这个问题)
你有畸形的json字符串作为错误,所以远程api期待数据是JSON格式。你需要做的
import json
data = json.dumps(data)
res = r.post(blast_url, headers = headers, data = data).text
而且使内容类型的标题为:
headers['Content-Type'] = 'application/json'
你应该该行res = r.post(blast_url, headers = headers, params = data).text
更改为res = r.post(blast_url, headers = headers, data = data).text
此外,使用一些工具之前,请仔细阅读本工具的文档,例如,dosc的请求,你可以找到
我已经阅读了,但得到的答复是不工作,这将产生一个错误:{“错误”: {“name”:“JSONRPCError”,“message”:“解析JSON HTTP请求时出错:格式错误的JSON字符串,既不是标签,数组,对象,数字,字符串或原子,字符偏移0(在\”method = HomologyServi。 ..“)at /disks/patric-common/runtime/lib/perl5/site_perl/5.20.2/x86_64-linux/Moose/Meta/Method/Delegation.pm line 110. \ n”,“code”: - 32700},“version”:“1.1”,“id”:“27057295081137034”} – CodeNoob
@CodeNoob,检查我的答案,如果它不起作用,那么让我知道我可以发布另一个解决方案 – MohitC
井工作天才;)谢谢你这么多 – CodeNoob