我试图通过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,看看我发送到服务器的确切内容,虽然我已经逐字使用了上面的代码,但是没有回馈浏览器的值。
有没有人对为什么会发生这种情况/如何实际获取数据有任何想法?感谢您的任何意见!
答案 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
}