有时要用到 form-data 这种形式post 上传文件到服务器,下面介绍使用python 实现的简便方法。
方法一,使用 urllib2 自己打包
自己封装form-data 也很方便
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="new_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'
方法二,使用request
更简洁
import requests
url = 'xxx'
files={'file':('newname.jpg',open('localname.jpg','rb'),'image/jpeg')}
rsp=requests.post(url,files=files)
print(rsp.request.text)