python post 上传文件_Python脚本POST上传数据以及文件

本文分享了一位初学者如何花费2小时根据新浪微博Python SDK编写Python脚本,解决POST上传数据和文件的问题,适合Python新手学习 multipart/form-data编码技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python脚本POST上传数据以及文件

三流编码员

2012-09-23

1953 阅读

查了众多,发现都不满意,不是这里有问题,就是那里有问题,真是郁闷,最后参照新浪微博Python SDK写了一个。花了我两个小时,毕竟初学Python,写的不好,分享一下

#/usr/bin/python

#author Yee

#coding=utf-8

import sys,os,urllib2

import mimetypes

import mimetools

def get_content_type(filepath):

return mimetypes.guess_type(filepath)[0] or 'application/octet-stream'

def encode_multipart_formdata(fields, files = {}):

boundary = mimetools.choose_boundary()

CRLF = '\r\n'

data = []

for key in fields:

data.append('--' + boundary)

data.append('Content-Disposition: form-data; name="' + key + '"')

data.append('')

data.append(fields[key])

for key in files:

data.append('--' + boundary)

data.append('Content-Disposition: form-data; name="'+ key +'"; filename="'+ files[key]['filename'] + '"')

data.append('Content-Type: "' + files[key]['type'] + '"')

data.append('')

data.append(files[key]['filedata'])

data.append('--' + boundary + '--')

data.append('')

body = CRLF.join(data)

content_type = 'multipart/form-data; boundary=%s' % boundary

return {'content_type':content_type,'body':body}

def http_call(url,params,files = {}):

params = encode_multipart_formdata(params, files)

req = urllib2.Request(url, data = params['body'])

if params['content_type']:

req.add_header('Content-Type',params['content_type'])

resp = urllib2.urlopen(req)

body = resp.read()

return body

def httpopenfile(url):

filedata = urllib2.urlopen(url)

data = filedata.read()

fileinfo = filedata.info()

if fileinfo.has_key("Content-Length"):

filesize = fileinfo["Content-Length"]

else:

filesize = 0

filename = os.path.basename(url)

filetype = get_content_type(filename)

fileInfo = {'filename':filename,'size':filesize,'type':filetype,'filedata':data}

return fileInfo

def sendwb(url,data,imgpath = ''):

if imgpath != '':

file = httpopenfile(imgpath)

ret = http_call(url,data,files = {'file':file})

return;

ret = http_call(url,data)

作者:三流编码员

左手代码,右手可乐!

发表评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值