python拼接form-data的post內容

來源:互聯網
上載者:User
#!\urs\bin\env python#encoding:utf-8       #設定編碼方式    from http2 import httpimport urllibdef ReadFileAsContent(filename):    #print filename    try:        with open(filename, 'rb') as f:            filecontent = f.read()    except Exception, e:        print 'The Error Message in ReadFileAsContent(): ' + e.message         return ''    return filecontentdef get_content_type(filename):    import mimetypes    return mimetypes.guess_type(filename)[0] or 'application/octet-stream'def isfiledata(p_str):     import re        r_c = re.compile("^f'(.*)'$")    rert = r_c.search(str(p_str))    #rert = re.search("^f'(.*)'$", p_str)    if rert:        return rert.group(1)    else:        return None    def encode_multipart_formdata(fields):    '''            該函數用於拼接multipart/form-data類型的http請求中body部分的內容            返回拼接好的body內容及Content-Type的頭定義    '''    import random    import os    BOUNDARY = '----------%s' % ''.join(random.sample('0123456789abcdef', 15))    CRLF = '\r\n'    L = []    for (key, value) in fields:        filepath = isfiledata(value)        if filepath:            L.append('--' + BOUNDARY)            L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, os.path.basename(filepath)))            L.append('Content-Type: %s' % get_content_type(filepath))            L.append('')            L.append(ReadFileAsContent(filepath))         else:            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

其中需要注意的是檔案資料的字典值,其格式為f'/path/to/file',具體調用的形式如下:

form_data = [('gShopID','489'),("addItems", r"f'D:\case3guomei.xml'"), ('validateString', '92c99a2a36f47c6aa2f0019caa0591d2')]form_data_re = encode_multipart_formdata(form_data)print form_data_re

返回的內容是一個元組,第一個參數是要求標頭中Content-Type的值,第二個是具體post的內容。然後使用httplib的post方法就可以發送了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.