1. 程式人生 > >使用python2實現http multipart/form-data資料傳輸

使用python2實現http multipart/form-data資料傳輸

Python3貌似有比較方便的方式,Python2得自己寫點程式碼。

程式碼基本上參考了一位仁兄釋出在github上的程式碼,但是找不到他的連結了,對不住。不過他的程式碼貌似跑不過,我這裡做了修改後,釋出在這裡,希望對後來人有幫助。

其實最重要的還是要了解http有關這部分的協議。不懂的可以找相關資料瞭解一下,這裡推薦一個:

import httplib
import mimetypes


def post_multipart(host, selector, fields, files):
    content_type, body = encode_multipart_formdata(fields, files)
    body_buf = bytearray(body)
    h = httplib.HTTP(host)
    h.putrequest('POST', selector)
    h.putheader('content-type', content_type)
    h.putheader('content-length', str(len(body_buf)))
    h.endheaders()
    h.send(body_buf)
    errcode, errmsg, headers = h.getreply()
    print errcode, errmsg
    return h.file.read()


def encode_multipart_formdata(fields, files):
    LIMIT = '----------lImIt_of_THE_fIle_eW_$'
    body = []
    for (key, value) in fields:
        body.extend(bytes('\r\n--' + LIMIT + '\r\n'))
        body.extend(bytes('Content-Disposition: form-data; name="%s"\r\n' % key))
        body.extend(bytes('\r\n'))
        body.extend(bytes(value))
    for (key, filename, value) in files:
        body.extend(bytes('\r\n--' + LIMIT + '\r\n'))
        body.extend(bytes('Content-Disposition: form-data; name="%s"; filename="%s"\r\n' % (key, filename)))
        body.extend(bytes('Content-Type: %s\r\n' % get_content_type(filename)))
        body.extend(bytes('\r\n'))
        body.extend(value)
    body.extend('\r\n--' + LIMIT + '--\r\n')
    content_type = 'multipart/form-data; boundary=%s' % LIMIT
    return content_type, body


def get_content_type(filename):
    return mimetypes.guess_type(filename)[0] or 'application/octet-stream'


if "__main__" == __name__:
    data = [0x01, 0x02, 0x03, 0x04]
    fields = [("type", "0")]
    files = [("data", "data", data)]
    response_str = post_multipart("127.0.0.1:8080", "/doSomething", fields, files)
    print response_str


相關推薦

使用python2實現http multipart/form-data資料傳輸

Python3貌似有比較方便的方式,Python2得自己寫點程式碼。 程式碼基本上參考了一位仁兄釋出在github上的程式碼,但是找不到他的連結了,對不住。不過他的程式碼貌似跑不過,我這裡做了修改後,釋出在這裡,希望對後來人有幫助。 其實最重要的還是要了解http有關這部分

Android模擬 HTTP multipart/form-data 請求協議資訊實現圖片上傳

轉自:http://www.linuxidc.com/Linux/2011-08/41944.htm 問題: Android應用中,當遇到填寫使用者資訊、發表評論等操作,不可避免會遇到“form表單操作”(類似web form操作)上傳圖片的功能。 在這種情況下,使用

HTTP協議之post multipart/form-data資料型別例項

首先,說這個問題之前吐槽一下網上的文章,做這個東西的時候幾乎看了所有的部落格,沒一個說到點上的,太籠統,也不完整,我就在想等我做好一定要寫篇完整的文章,其實最好的原始碼就是提供的demo。 1、先說下問題背景 http://help.robotscloud.com/book

Http multipart/form-data多引數Post方式上傳資料

關於multipart/form-data格式的上傳,網上有大量的解決文章,這裡,我們使用HttpURLConnection 來完成 POST /test HTTP/1.1 Accept-Language: zh-CN,zh;q=0.8 Accept:

Android HTTP multipart/form-data 請求協議資訊實現圖片上傳

問題: Android應用中,當遇到填寫使用者資訊、發表評論等操作,不可避免會遇到“form表單操作”(類似web form操作)上傳圖片的功能。 在這種情況下,使用Android的HTTPConnection/ ApacheHTTP 通過POST 和GET的方式就實現不了

從零開始實現multipart/form-data資料提交

在HTTP服務應用中進行資料提交一般都使用application/json,application/x-www-form-urlencoded和multipart/form-data這幾種內容格式。這幾種格式的處理複雜度處理起來和前面定義的先後順序一樣由易到難。不過現有工具都提供了完善的功能在提交這些資料的時

HTTP multipart/form-data 上傳方式說明(有8個註意點)

ria ubi reference 就會 ros pda www tran cep ( From: http://home.meegoq.com/home-space-do-blog-uid-17-id-81.html ) HTTP multipart/form-data

前端提交multipart/form-data資料,由api服務A將請求轉發到api服務B

maven依賴: <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactI

Python 傳送 multipart/form-data 資料

前言 最近做知乎模擬登入的時候,碰到一個很奇怪的引數型別,與一般的鍵值對不同,大概長這樣: ------WebKitFormBoundaryA0Srut8TBztAofvx Content-Disposition: form-data; name="cl

HttpClient:模擬表單提交檔案,傳送multipart/form-data資料

使用HttpClient來模擬表單提交,傳送檔案 常用於非web客戶端與web後端傳輸檔案 1.pom <dependencies> <!-- https://m

【Android Net】Volley實現multipart/form-data)Post請求

private void doInit(final Map<String, String> params, final File uploadFile) { String initUrl = "http://192.168.1.1:8080/cld/in

HTTP multipart/form-data格式之檔案上傳

報文格式如下: --${bound}   Content-Disposition: form-data; name="Filename" HTTP.pdf   --${bound}   Content-Disposition: form-data; name="fil

使用HttpClient4,post提交multipart/form-data資料

問題由來:   在Vert.x的專案中,進行公眾號開發的時候,發現回覆使用者圖片的時候需要先上傳圖片,獲取一個media_id,然後拿著這個media_id去傳送資料。   問題是,Vert.x的vertx-web-client不提供表單檔案上傳(form-data)方式p

python通過http(multipart/form-data)上傳檔案的方法

之前寫過一篇部落格,說的如何python如何通過http下載檔案,今天寫一篇部落格來介紹如下,python如何通過request庫實現上傳檔案 這裡主要是解決multipart/form-data這種格式的檔案上傳,基本現在http協議上傳檔案基本上都是通過這種格式上傳 一、思路 一般情況下,如果我們往一個地

Atitit 檔案上傳功能的實現 圖片 視訊 目錄 1. 上傳原理 1 1.1. http post編碼 multipart / form-data 1 1.2. 臨時檔案模式 最簡單 2 1.3

Atitit 檔案上傳功能的實現 圖片 視訊   目錄 1. 上傳原理 1 1.1. http post編碼 multipart / form-data 1 1.2. 臨時檔案模式  最簡單 2 1.3. 位元組陣列模式  簡單 2

[寫著玩]理解multipart/form-data,構造http表單實現android圖片上傳

關於multipart/form-data,可參考https://blog.csdn.net/zshake/article/details/77985757 客戶端  引數解釋,上傳主方法 private void submit() { Map<String, Obj

Multipart/form-data POST檔案上傳詳解 理論 簡單的HTTP POST 大家通過HTTP向伺服器傳送POST請求提交資料,都是通過form表單提交的,程式碼如下:

Multipart/form-data POST檔案上傳詳解 理論 簡單的HTTP POST 大家通過HTTP向伺服器傳送POST請求提交資料,都是通過form表單提交的,程式碼如下: <form method="post"action="http://w.soh

SpringMVC接收 multipart/form-data 傳輸資料

spring上下文配置中加入如下配置,一定要注意,id為multipartResolver,不能是其他的。 <bean id="multipartResolver"

HTTP form表單提交數據(enctype="multipart/form-data" method="post")的服務端處理

keyword -s detail put form表單 表單提交 class eth ron 參考鏈接:http://blog.csdn.net/u010018421/article/details/52833346 <form action="fileUpload

WebApi實現Ajax模擬Multipart/form-data方式多文件上傳

vid 基本 rip err tps del 多文件 delete back 前端頁面代碼: <input type="file" class="file_control" /><br /> <input type="file" cla