2018年7月2日 星期一 晴

python在post传文件时,有时要用到 form-data这种形式,本文介绍了两种方法。第一种是用urllib2,自己封装打包form-data;第二种是用request,很简洁。第一种方法,可以给其他语言参考一下。

方法一: [code] def test(): #boundary只要是随机不同的就行 boundary = ‘———-%s’ % hex(int(time.time() * 1000)) data = [] data.append(’–%s’ % boundary)

fr=open(r'test2.jpg','rb')
data.append('Content-Disposition: form-data; name="%s"; filename="test2.jpg"' % 'file')
data.append('Content-Type: %s\r\n' % 'image/jpeg')
data.append(fr.read())
fr.close()
data.append('--%s--\r\n' % boundary)

#http_url='http://remotserver.com/page.php'
http_url = 'http://xxx/v1/upload'
http_body='\r\n'.join(data)
try:
    #buld http request
    req=urllib2.Request(http_url, data=http_body)
    #header
    req.add_header('Content-Type', 'multipart/form-data; boundary=%s' % boundary)#最重要的一行

    #post data to server
    resp = urllib2.urlopen(req, timeout=5)
    #get response
    qrcont=resp.read()
    print qrcont
except Exception,e:
    print 'http error'

[/code]

方法2: [code] import requests url = ‘xxx’ files={‘file’:(’test2.jpg’,open(’test2.jpg’,‘rb’),‘image/jpeg’)} rsp=requests.post(url,files=files) print(rsp.request.text) [/code]