Python请求不会上载文件

2024-05-16 23:58:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我参加的课程开发一个工作流程。我试图利用一个tool,它需要我上传两个文件,并提供一个电子邮件和一个作业名。在

我尝试了很多来自这个网站的建议,并阅读了请求的documentation,但似乎没有任何效果。在

这是我的(混乱)代码:

import requests, sys, urllib3, json, os

START_URL = 'https://bmm.crick.ac.uk/~svc-bmm-swarmdock/submit.cgi'
EMAIL = 'someAddress@domain.com'


if len(sys.argv) != 3:
    print('Usage: -a receptor -a ligand')
    sys.exit(1)

'''
with open('./Swarm Dock/pdb/1asu.pdb') as rec_file:
    rec_contents = rec_file.read()
with open('./Swarm Dock/pdb/2msi.pdb') as lig_file:
    lig_contents = lig_file.read()
'''

print('cwd: {}'.format(os.getcwd()))

form_data = {
    'formSubmitBut': 'Submit New Job',
    'jobname': 'test1',
    'email': EMAIL
    } #, 'receptorfile': rec_contents, 'ligandfile': lig_contents}
files = {
    'receptorfile': (open('./Swarm Dock/pdb/1ASU.pdb', 'rb'), 'fakepath/1asu.pdb'), #'receptorfile': ('1ASU',open('./Swarm Dock/pdb/1ASU.pdb', 'rb'), 'plain/text'),
    'ligandfile': (open('./Swarm Dock/pdb/2MSI.pdb', 'rb'), 'fakepath/2msi.pdb')
}

response = requests.post(START_URL, files=files, data=form_data)
print(response.content)

输出如下:

^{pr2}$

正如您在输出中看到的,jobname和email字段被正确填写。我不明白为什么id='jserrormsg',id='ligfileconfirm'和id='recfileconfirm'的输出没有显示任何值。似乎因为某种原因没有提交表格。在

我试过:

form_data = { 
    'formSubmitBut': 'Submit New Job', 
    'jobname': 'test1', 
    'email': EMAIL }
files = { 
    'receptorfile': open('./Swarm Dock/pdb/1ASU.pdb', 'rb'),
    'ligandfile': open('./Swarm Dock/pdb/2MSI.pdb', 'rb')
}

response = requests.post(START_URL, files=files, data=form_data) 

以及

form_data = {
    'formSubmitBut': 'Submit New Job',
    'jobname': 'test1',
    'email': EMAIL
    }
files = {
    'receptorfile': ('1asu.pdb', open('./Swarm Dock/pdb/1ASU.pdb', 'rb'), 'application/vnd.palm', {'Expires': '0'}),
    'ligandfile': ('2msi.pdb', open('./Swarm Dock/pdb/2MSI.pdb', 'rb'), 'application/vnd.palm', {'Expires': '0'})
}

response = requests.post(START_URL, files=files, data=form_data)
print(response.content)

以及

import requests, sys, urllib3, json, os
from requests_toolbelt.multipart.encoder import MultipartEncoder

multipart_data = MultipartEncoder(
    fields={
        'receptorfile': ('1asu.pdb', open('./Swarm Dock/pdb/1ASU.pdb', 'rb'), 'text/plain', {'Expires': '0'}),
        'ligandfile': ('2msi.pdb', open('./Swarm Dock/pdb/2MSI.pdb', 'rb'), 'text/plain', {'Expires': '0'}),
        'jobname': 'test1',
        'email': EMAIL
    }
)

response = requests.post(START_URL, data=multipart_data, headers={'Content-Type': multipart_data.content_type})

print('Status Code: {}'.format(response.status_code))
print(response.content)

响应码为200,输出同上。在


Tags: formurldataemailresponsefilesopenrequests