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

 

转载于:https://www.cnblogs.com/wtil/p/10081369.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值