1. 程式人生 > >requests傳送multipart/form-data請求(檔案)

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