在写爬虫有时候会发现这种请求数据,其实就是一个上传图片的请求。
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