easy_install poster
# test_client.pyfrom poster.encode import multipart_encodefrom poster.streaminghttp import register_openersimport urllib2# 在 urllib2 上註冊 http 流處理句柄register_openers()# 開始對文件 "DSC0001.jpg" 的 multiart/form-data 編碼# "image1" 是參數的名字,壹般通過 HTML 中的 <input> 標簽的 name 參數設置# headers 包含必須的 Content-Type 和 Content-Length# datagen 是壹個生成器對象,返回編碼過後的參數datagen, headers = multipart_encode({"image1": open("DSC0001.jpg", "rb")})# 創建請求對象request = urllib2.Request("http://localhost:5000/upload_image", datagen, headers)# 實際執行請求並取得返回print urllib2.urlopen(request).read()
很簡單,文件就上傳完成了。
2.其中那個 register_openers() 相當於以下操作:
from poster.encode import multipart_encodefrom poster.streaminghttp import StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandlerhandlers = [StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandler]opener = urllib2.build_opener(*handlers)urllib2.install_opener(opener)
3.另外,poster 也可以攜帶 cookie,比如:
opener = poster.streaminghttp.register_openers()opener.add_handler(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))params = {'file': open("test.txt", "rb"), 'name': 'upload test'}datagen, headers = poster.encode.multipart_encode(params)request = urllib2.Request(upload_url, datagen, headers)result = urllib2.urlopen(request)