2017-10-17 83 views
0

問題描述
我想發送一個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,但我不知道我應該怎麼格式化這個(以及這是否會解決這個問題)

回答

1

你有畸形的json字符串作爲錯誤,所以遠程api期待數據是JSON格式。你需要做的

import json 
data = json.dumps(data) 
res = r.post(blast_url, headers = headers, data = data).text 

而且使內容類型的標題爲:

headers['Content-Type'] = 'application/json' 
+1

井工作天才;)謝謝你這麼多 – CodeNoob

0

你應該該行res = r.post(blast_url, headers = headers, params = data).text更改爲res = r.post(blast_url, headers = headers, data = data).text

此外,使用一些工具之前,請仔細閱讀本工具的文檔,例如,dosc的請求,你可以找到​​

+0

我已經閱讀了,但得到的答覆是不工作,這將產生一個錯誤:{「錯誤」: {「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

+0

@CodeNoob,檢查我的答案,如果它不起作用,那麼讓我知道我可以發佈另一個解決方案 – MohitC