【问题标题】:POST multipart/form data to site with checkboxes via python通过python使用复选框将多部分/表单数据发布到站点
【发布时间】:2014-06-17 07:56:47
【问题描述】:

总的来说,我对 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 是文件名和完整文件名 - ex ('Practice', 'Practice.txt') 这返回了我认为很好的格式。但是当我尝试使用 urllib2、urllib2 请求和 urlopen 发布加密数据时,我得到的东西看起来像结果页面的源代码,但没有任何我需要的数据(即没有值)。我也试过了,只是想看看它是否有效。

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

问题是,我认为该页面要求您选择一个复选框,而我不知道如何在发布请求中执行此操作。我正在考虑接下来尝试使用 cgi 脚本,但实际上我已经没有想法了。

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: python post checkbox multipartform-data


    【解决方案1】:

    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
    

    【讨论】:

    • 感谢您的反馈,但我仍有问题。它似乎没有提交文件中的数据。这是在wireshark Boundary 上显示的内容:\r\n--41a084d01fce47beaa2327cc74c33513\r\n 封装的多部分部分:Content-Disposition: form-data;名称=“文件”; filename="Bishop/Practice.txt"\r\n\r\n 最后一个边界:\r\n--41a084d01fce47beaa2327cc74c33513--\r\n --缺少内容类型和行数据。你知道这是为什么吗?谢谢。
    • 嘿!感谢您回复这篇文章。其他人发布了这个问题的答案,措辞略有不同,并且有效。他使用了 urllib,其格式与上述格式相似,但他提供的缺少的代码是使用 'Sessions = post.sessions()。这让我的代码工作!再次感谢您的回复。
    • @Shay - 很高兴你明白了,会话是另一个重要的概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多