通过Python向含复选框的网站发送POST multipart/form数据
我对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
,你需要设置 data
和 files
。
files = {'file': ('Practice.txt', open('Practice.txt', 'rb'))}
data = {'amino':'amino', 'aliphatic': 'aliphatic'}
r = requests.post(url, files=files, data=data)
r.text