• requests发送multipart/form-data请求(文件)


    在写爬虫有时候会发现这种请求数据,其实就是一个上传图片的请求。
    
    
    def send_file(user,user_key,tousername,file,cookice):
        '''
        发送文件表情之类
        :param user: 发送消息的用户 [{'FromUserName':FromUserName,'Content':Content}]
        :param user_key: 当前登录用户的凭证信息
        :param tousername:
        :param file: 文件地址
        :param cookice:
        :return:
        '''
    
        filename = os.path.basename(file)
        stime = time.asctime( time.localtime(time.time())).split(' ')
        stime.insert(4,stime[-1])
        stime[-1] = 'GMT+0800'
        stime = ' '.join(stime)
        m1 = hashlib.md5()
        with open(file,'rb') as f:
            m1.update(f.read())
        md5 = m1.hexdigest()
    
        size = os.path.getsize(file)
    
        json_data = {
            "BaseRequest":
                {
                    "Uin": user_key['wxuin'],
                    "Sid": user_key['wxsid'],
                    "Skey": user_key['skey'],
                    "DeviceID": "e823192381686302"
                },
            "ClientMediaId": int(time.time() * 1000),
            "TotalLen": size,
            "StartPos": 0,
            "DataLen": size,
            "MediaType": 4,
            "FromUserName": user['UserName'],
            "ToUserName": tousername,
            "FileMd5": md5
        }
    
        file_headers_1 = {
            'id':(None,'WU_FILE_0'),
            'name':(None,filename),
            'type':(None,'image/gif'),
            'lastModifiedDate':(None,stime),
            'size':(None,str(size)),
            'mediatype':(None,'doc'),
            'uploadmediarequest':(None,json.dumps(json_data,ensure_ascii=False)),
            'webwx_data_ticket':(None,cookice.get('webwx_data_ticket')),
            'pass_ticket':(None,user_key['pass_ticket']),
            'filename':(filename, open(file, 'rb'),'image/gif'),
            'Content-Type':'image/gif',
        }
        multipar_encoder = MultipartEncoder(fields=file_headers_1,boundary='---------------------------22619409317427')
    
    
        url = 'https://file.wx2.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json'
        headers ={
            'Host': 'file.wx2.qq.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0',
            'Accept': '*/*',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
            'Accept-Encoding': 'gzip, deflate, br',
            'Referer': 'https://wx2.qq.com/',
            'Content-Type': multipar_encoder.content_type,
            'Origin': 'https://wx2.qq.com',
        }
    
        res = requests.post(url,cookies=cookice,data=multipar_encoder,headers=headers)
        mediaid = res.json().get('MediaId')
    
        baseurl = 'https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendemoticon?fun=sys&lang=zh_CN&pass_ticket=pass_ticket={0}'
        sendurl = baseurl.format(user_key['pass_ticket'])
        ctime = int(time.time() * 10000000)
        send_data = {"BaseRequest":
                         {"Uin": user_key['wxuin'], "Sid": user_key['wxsid'], "Skey": user_key['skey'],
                          "DeviceID": "e823192381686302"},
                     "Msg":
                         {"Type": 47, "FromUserName": user['UserName'],
                          "EmojiFlag":2,
                          "MediaId":mediaid,
                          'ClientMsgId':ctime,
                          'LocalID':ctime,
                          "ToUserName": tousername,},
                     "Scene": 0}
        send_res = requests.post(sendurl, json=send_data,cookies=cookice).json()
    return send_res
  • 相关阅读:
    rgb三基色与rgba
    HTML标签与属性
    HTML的状态码
    sublime text 编辑器的操作
    驼峰命名法
    css动画速度与三次贝赛尔曲线
    相对路径和绝对路径引发的图片无法显示问题
    Javascript-选择器集合调用方法
    Javascript-商品管理新增/删除/修改功能
    Javascript-随滚轮匀速滑动的浮动广告窗动画
  • 原文地址:https://www.cnblogs.com/wtil/p/10081369.html
Copyright © 2020-2023  润新知