这周公司稳定运行的某红书搜索接口突然失效了,作为公司唯二的爬虫,公司由我负责解决,一开始我听到这个消息心情是复杂的,好的是失效的不是网页,网页每次稍微变动都要排查好久,忧的是老王并没有多少对小程序的经验,尤其是这种大ip。
不管什么心情都要去解决这个问题,毕竟吃人的饭就要看人脸色。
首先打开我心爱的fidller进行抓包,先看看怎么个回事。
分析了几个数据包,发现并没有有效信息,虽然有加密数据但是和公司之前接口相去甚远。
不慌,打开我的得力助手“雷神模拟器”把"内置系统证书,算法助手,drony,小黄鸟,lsp"全给安排上,能过掉这个组合的程序天下少有。
打开我fiddler满怀期待的准备玩弄红书的小链接,不争气的它却第一次让我失望,跟之前抓的包一摸一样。
只能上网借鉴一下别人有什么妙招,这是一个工具出现在我眼前"WeChatOpenDevTools-Python-main"虽然看不懂什么意思,但我认识pyhon,open和wechat,python打开微信,嘿嘿嘿。
https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python
使用也很简单,直接python main.py -x就行,不过要先装好依赖。
启动后直接打开微信小程序就会有一个类似浏览器F12的调试台
最后结果依然是抓不到包,继续去网上借鉴,最后在看雪大佬的只言片语中发现,小程序如果使用云开发可能就会这样,抓包是走不通了,只能继续找别的方法。
这时看到可以还原小程序项目文件实现逆向,终于进入正题了,哈哈哈哈。
先找到自己电脑微信息存储位置,然后打开小程序文件夹,如果有很多小程序hash文件可以全部删掉再打开。
下载wechatMiniAppReverse-main工具对文件进行解密(需要先解密再还原),有的教程说用UnpackMiniApp.exe,不过我用就显示找不到id。
pc_wxapkg_decrypt.exe -wxid 微信小程序id -in 要解密的wxapkg路径 -out 解密后的路径
解密后拿着生成的文件去使用wxappUnpacker还原就行,具体怎么配置使用可以找教程,太多了。
还原后直接导入微信开发者工具,不过由于不可能完全还原,所以调试是调试不了的(把报错全部手动解决掉就可以调试),只能搜一些加密参数特征。
简单搜了一些特征发现一些有价值的信息,但是帮助不大,只能确定加密没有大变,甚至根本没变。
原来的x-sign其实就是一个加盐的md5加密,Authorization是根据用户信息生成的唯一凭证。
不甘心的我继续在网上借鉴,最终找到一串神奇的代码,这老哥不知道怎么学的,这样写get请求,不过也恰恰是这样,才规避掉这次改动。
其实跟原来相比就去掉了一个prependNoteIds参数,原来后台可能加着这个参数,现在不加了,由于公司产权问题代码就不放了,跟这个差不多。
import requests
import urllib3
class _xhs(object):
def __init__(self):
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
self.url = 'https://www.xiaohongshu.com/fe_api/burdock/weixin/v2/search/notes?'
self.key_dict = {
'1': 'Xd44b23783ad8f18c2e41c045a0cda867',
'2': 'Xe8b3f71b7585c080e9ca55e7d1b034e0',
'3': 'X2351ff0514bb05145e8171975fe1d96d',
'4': 'X2422fd5312cf50b12c722e1d63b2f9aa',
'5': 'X44d5cf63fb658c609be10404b77291d5',
}
def get_detail_url(self):
for key, value in self.key_dict.items():
headers = {
'Host': 'www.xiaohongshu.com',
'Connection': 'keep-alive',
'Authorization': 'wxmp.221e2c43-41e3-401a-8g53-cf3cbd5ab556',
'Device-Fingerprint': 'WHJMrwNw1k/Ff2NfArpikjizTJkAdQe2Y1P0AQTa74gJcSlBSWoMjTXYq+VUDRGsE9VCMBXrfD5W9YT2GqNMbnISuxoWerClbdCW1tldyDzmauSxIJm5Txg==1487582755342',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat',
'X-Sign': value,
'content-type': 'application/json',
'Referer': 'https://servicewechat.com/wxffc08ac7df482a27/378/page-frame.html',
'Accept-Encoding': 'gzip, deflate, br',
}
params = {
'keyword': '揭阳周边游',
'sortBy': 'general',
'page': key,
'pageSize': '20',
'needGifCover': 'true',
}
res = requests.get(self.url, headers=headers, params=params, verify=False).text
print(self.url)
print(headers)
print(res)
if __name__ == '__main__':
xhs = _xhs()
xhs.get_detail_url()
#加密参数
'/fe_api/burdock/weixin/v2/search/notes?keyword=%E6%8F%AD%E9%98%B3%E5%91%A8%E8%BE%B9%E6%B8%B8&sortBy=general&page=1&pageSize=20&needGifCover=trueWSUDD'