打开一个Up主的主页,找他的视频列表

打开网易新闻 查看更多图片

抓包找接口,这个就不说了。

打开网易新闻 查看更多图片

怎么定位接口加密字段w_rid

全局搜索w_rid,结合接口的启动器,找到js,并在指定位置打上断点

打开网易新闻 查看更多图片

怎么寻找生成w_rid的规则

刷新页面,浏览器断点触发,暂停这里,看规则。

  1. 请求的json参数按照key的升序排列后,按照key=value的方式用&符号拼接,最后拼上固定值c,然后用u方法执行了一下。
  2. u是md5方法。

逆向代码编写

  1. python中如何进行json键值对排序并拼接。

打开网易新闻 查看更多图片

  1. python 中md5 方法是什么

打开网易新闻 查看更多图片

  1. 请求转换成python代码如何操作

打开网易新闻 查看更多图片

最终程序的代码

打开网易新闻 查看更多图片

到这里基本上就完成了逆向的初始工作,以下是参考代码。

import json
import requests
import hashlib
import timespan
def md5_test1(str):
md5 = hashlib.new('md5', str.encode('utf-8'))
return md5.hexdigest()
cookies = {
}
headers = {
'authority': 'api.bilibili.com',
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7',
'cache-control': 'no-cache',
# 'cookie': "LIVE_BUVID=AUTO1815980181683491; CURRENT_FNVAL=4048; _uuid=B3C114D9-92106-9CFD-C810F-64217369107E149997infoc; buvid_fp=5f83879fa7eaa19f71ab763727961b90; buvid4=203D90B3-75B0-B51B-D78B-2C126E7F4BDE51179-022080515-5RwyjpFC38scJX9tfcr2IA%3D%3D; nostalgia_conf=-1; i-wanna-go-back=-1; b_ut=7; rpdid=|(k|)llmk~mJ0J'uY~Yk)|lkR; CURRENT_PID=b4e47070-cc60-11ed-bffb-27be7f97fd03; PVID=1; FEED_LIVE_VERSION=V8; header_theme_version=CLOSE; home_feed_column=5; browser_resolution=1920-961; sid=7u3q9r50; innersign=1; bsource=search_baidu; buvid3=632E18B1-1597-D568-26BF-C1D4584F62AC37903infoc; b_nut=1684820937; b_lsid=8FC6C53D_18847277D69",
'origin': 'https://space.bilibili.com',
'pragma': 'no-cache',
'referer': 'https://space.bilibili.com/17239951/video',
'sec-ch-ua': '"Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
}
params = {
'mid': '17239951',
'ps': '30',
'tid': '0',
'pn': '1',
'keyword': '',
'order': 'pubdate',
'platform': 'web',
'web_location': '1550101',
'order_avoided': 'true',
'wts': f'{str(timespan.timespan())[:10]}',
}
print(params)
sorted_dict = dict(sorted(params.items()))
joined_key_value = '&'.join([f'{k}={v}' for k, v in sorted_dict.items()])
wrid = md5_test1(joined_key_value+"ce6d4422ece814c69d256fa9617e4acc")
params['w_rid']= wrid
response = requests.get('https://api.bilibili.com/x/space/wbi/arc/search', params=params, cookies=cookies, headers=headers)
print(response.json())