使用request.post通过python发布多部分表单数据不起作用

时间:2014-06-17 04:36:10

标签: python post request multipartform-data

我试图通过python 2.7使用http://www.camp.bicnirrh.res.in/featcalc/来发布multipart/form-data。具体来说,我以'Practice.txt'格式上传文件(称为FASTA)基本上是这种格式:

'>1(ENTER)STRINGOFSPECIFICCAPITALLETTERS' 

到这个网站也有一个文本框,您也可以手动输入数据(我留空)。此数据网站还有复选框选项,我要在其中选择'Length''Net Charge''Aliphatic Index''Hydrophobicity'。在页面底部有一个'Submit'按钮 目前,这是我用于POST响应的代码。

files = {'file': ('Practice.txt', open('Practice.txt', 'rb'))}
data = {'Length':'Length', 'Net Charge':'Net Charge', 'Aliphatic Index':'Aliphatic Index','Hydrophobicity':'Hydrophobicity'}
r = requests.post(url, files=files, data=data)
r.text

问题是当我执行r.text时,这些都不会带回任何数据。使用浏览器时,网站会计算所有这些内容的值。我收到了WireShark,我一直在尝试查看实时Feed,看看我发送到服务器的确切内容,虽然我已经逐字使用了上面的代码,但是没有回馈浏览器的值。

有没有人对为什么会发生这种情况/如何实际获取数据有任何想法?感谢您的任何意见!

1 个答案:

答案 0 :(得分:3)

这将有效:

import requests
import urllib

session = requests.Session()

file={'file':(open('practice.txt','r').read())}

url = 'http://www.camp.bicnirrh.res.in/featcalc/tt1.php'

payload = {
  'length'   :'length',     #Length
  'netcharge':'netcharge',  #Net Charge
  'aliphatic':'aliphatic',  #Aliphatic Index
  'gravy'    :'gravy'       #Hydrophobicity
  }

raw = urllib.urlencode(payload)

response = session.post(url, files=file, data=payload)

print(response.text)

所有选项:

payload = {
  'length'     :'length',      #Length
  'netcharge'  :'netcharge',   #Net Charge
  'amino'      :'amino',       #Amino acid composition
  'aliphatic'  :'aliphatic',   #Aliphatic Index
  'instability':'instability', #Instability Index
  'gravy'      :'gravy',       #Hydrophobicity
  'sec'        :'sec'          #Secondary Structure Propensity
  }