分享

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

 duanqs123 2016-07-04
三流编码员2012-09-23 

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

#/usr/bin/python
#author Yee <rlk002@gmail.com>
#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)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约