通过Python向含复选框的网站发送POST multipart/form数据

1 投票
1 回答
515 浏览
提问于 2025-04-18 10:00

我对Python和电脑还比较陌生。目前,我正在尝试向一个网站发送数据,具体来说就是http://www.camp.bicnirrh.res.in/featcalc/,在上传一个包含要分析数据的文件后,选择四个复选框。

到目前为止,我尝试了以下内容。

def encode_multipart_formdata(fields, files, data):
    """
    fields is a sequence of (name, value) elements for regular form fields.
    files is a sequence of (name, filename, value) elements for data to be uploaded as files
    Return (content_type, body) ready for httplib.HTTP instance
    """
    BOUNDARY = '-----------------------------7de18336272e32'
    CRLF = '\r\n'
    L = []
    L.append('--' + BOUNDARY)
    L.append('Content-Disposition: form-data; name="seq"')
    L.append('')
    L.append('--' + BOUNDARY)
    L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (files[0], files[1]))
    L.append('Content-Type: text/plain')
    L.append('')
    L.append(data)
    L.append('')
    for (key, value) in fields:
        L.append('--' + BOUNDARY)
        L.append('Content-Disposition: form-data; name="%s"' % key)
        L.append('')
        L.append(value)
    L.append('--' + BOUNDARY + '--')
    L.append('')
    body = CRLF.join(L)
    content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
    return content_type, body

在这段代码中,data是我打开、读取并关闭的文件,files是文件名和完整文件名,比如说('Practice', 'Practice.txt')。这段代码返回了我认为格式不错的结果。但是当我尝试用urllib2来发送加密的数据时,使用urllib2的请求和urlopen,我得到的结果看起来像是结果页面的源代码,但里面没有我需要的任何数据(也就是没有值)。我还尝试了这个,只是想看看能否成功。

files = {'file': ('Practice.txt', open('Practice.txt', 'rb'))}
r = requests.post(url, files=files)
r.text

我觉得问题在于,这个页面要求你选择一个复选框,而我完全不知道在发送请求时该怎么做。我在考虑接下来尝试用cgi脚本,但我真的快没有主意了。

任何帮助都会非常感激!谢谢!

1 个回答

0

这里最有用的模块是 requests,你需要设置 datafiles

files = {'file': ('Practice.txt', open('Practice.txt', 'rb'))}
data = {'amino':'amino', 'aliphatic': 'aliphatic'}
r = requests.post(url, files=files, data=data)
r.text

撰写回答