逆向工程入门 (二):获取评论/点赞微博的 API

逆向工程入门 (二):获取评论/点赞微博的 API

前言

在上一篇博客中,我们成功逆向获取了域名 m.weibo.cn 的发微博 API。根据我在其中详述的过滤 POST 方法来抓包互动请求的 API 接口,可以较容易地推理出评论/点赞微博的 API 接口。

遗留问题

上篇博客中曾提到一次 Cookie 的更新,我的 Cookie 从

SUB=_2A25KcMuXDeRhGeVL7VYV-SfFzzyIHXVpDEFfrDV6PUJbktANLXnQkW1NTCXsnxWC6W6onbf_fEsQaxfYXJQxPzJ3; ... XSRF-TOKEN=f13778

变成了

SUB=_2A25KcMuXDeRhGeVL7VYV-SfFzzyIHXVpDEFfrDV6PUJbktANLXnQkW1NTCXsnxWC6W6onbf_fEsQaxfYXJQxPzJ3; ... XSRF-TOKEN=8ea381; mweibo_short_token=bf3d747a9d

值得注意的是 mweibo_short_token 这个字段,不知道添加这个字段会不会可以延长 Cookie 刷新时间呢?可以看到,这个字段只在我第二次的 Cookie 中出现了,第一个 Cookie 中却没有,这是一个很有意思的现象!关于 Cookie 的有效期,我测试过至少 3 次,基本都是 15-19 分钟就过期了。

  • 可能的用途: short_token,从字面上理解,可能是一个“短期令牌”。它或许是为了增强安全性或者优化用户体验而设计的。我猜测它可能与维持登录状态、减少重复验证或者实现某些特定的功能(比如快速发布、自动刷新等)有关。
  • 出现时机: 它只在第二次测试的 Cookie 中出现了,而第一次没有。这可能说明 mweibo_short_token 的生成和使用有一定的触发条件。
    • 时间因素: 会不会和登录时长有关呢?会不会第一次登录不生成,退出登录后再次登录才生成?
    • 操作触发: 会不会进行某些操作才会生成呢?比如修改账户设置,发布特定内容等等。
    • 其他因素: 或者与服务器端的一些策略更新或者 A/B 测试有关。
  • 与 Cookie 过期的关系: 虽然 mweibo_short_token 看起来像是一个“短期令牌”,但目前我们还没有确凿的证据表明它能直接影响 Cookie 的过期时间(也就是测试的 15-19 分钟)。不过,这并不排除它们之间存在某种关联的可能性。毕竟,mweibo_short_token 的出现肯定是有其特定目的的,只是我们现在还不清楚。
  • 如何进一步探究: 可以从以下几个方面入手,进一步研究 mweibo_short_token 的作用:
    • 对比实验: 我们可以进行更多次的登录测试,记录每次 Cookie 的详细信息,看看 mweibo_short_token 是否总是伴随 XSRF-TOKEN 一起变化。同时,我们可以尝试在两次登录之间执行一些特定的操作,看看是否会影响 mweibo_short_token 的生成。比如,第一次登录后什么都不做,记录 Cookie;第二次登录后,修改一下个人资料或者发布一条微博,再记录 Cookie,对比看看。
    • 长期观察: 我们可以延长观察时间,看看 mweibo_short_token 的值是否会在一段时间后发生变化,或者消失。比如,可以分别在获取到 Cookie 后的 5 分钟、10 分钟、15 分钟、20 分钟打印一下 Cookie,观察 mweibo_short_token 的变化,说不定有新的发现。
    • 网络请求分析: 我们可以仔细分析包含 mweibo_short_token 的网络请求和响应,看看是否有其他相关的参数或者数据。特别是看看这个 token 是否被用于后续的某些请求中。

然而,以上方案都没有机会在今天实现,因为我记录了 3 个变化的 Cookie,均没有出现过之前只在“第二次”出现的 mweibo_short_token=bf3d747a9d,这让它看起来愈发神秘。

评论微博/删除评论的 API 接口

接下来进入正题,抓包 > 分析 > 写脚本。

评论微博的 API 接口

想评论微博正文网址https://m.weibo.cn/detail/xxxxxxxxxxxxxxxxx

发送评论,在“载荷” (Payload) 处抓包:

载荷

content: 第5次 04:49 st4分测试
mid: xxxxxxxxxxxxxxxxx
st: 95e264
_spr: screen:1920x1080
分析
  • content: 评论内容
  • mid: 微博正文网址最后的数字
  • st: Cookie 的 XSRF-TOKEN
  • _spr: 屏幕分辨率
代码实现思路

get_cookie_and_st.py 这个脚本依然用来获取记录 Cookie 和 st,评论脚本我们可以直接模仿之前的发微博脚本,修改一些数据,编写 comment_weibo_api.py。重点在于,如何构造 mid 合适呢?

mid 其实就是微博的 ID,用来唯一标识一条微博。

  1. comment_weibo 函数 (模仿 send_weibo 函数) 现在接收一个 weibo_url 参数,表示微博详情页的完整 URL。
  2. Referer 直接使用传入的 weibo_url
  3. midweibo_url 中提取。
代码示例

以下为 comment_weibo 函数示例:

def comment_weibo(content, weibo_url, cookie=None, x_xsrf_token=None):
    """使用 requests 库评论微博

    Args:
        content (string): 评论内容
        weibo_url (string): 微博详情页的完整 URL
        cookie (string, optional): 你的微博 Cookie. Defaults to None.
        x_xsrf_token (string, optional): 用于验证的 token, 需要抓包获取. Defaults to None.
    """

    url = "https://m.weibo.cn/api/comments/create"  # 微博评论接口

    headers = {
   
   
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
        "Referer": weibo_url,  # 评论的微博正文网址, 后续继续逆向微博用户详情api, 改成检测用户新发微博的网址 TODO
        "Origin": "https://m.weibo.cn",
        "Content-Type": "application/x-www-form-urlencoded",
        "X-Requested-With": "XMLHttpRequest",
        "X-XSRF-TOKEN": x_xsrf_token,
        "Cookie": cookie,
    }

    data = {
   
   
        "content": content,
        "st": x_xsrf_token,
        "_spr": "screen:1920x1080",  # 根据屏幕分辨率修改
        "mid": weibo_url.split("/")[-1],  # 从 weibo_url 中提取 mid
    }

    response = requests.post(url, headers=headers, data=data)

    if response.status_code == 200:
        result = response.json()
        if result["ok"] == 1:
            print("微博评论成功!")
            return True
        else:
            print(f"微博评论失败: {
     
     result['msg']}")
            return False
    else:
        print(f"请求失败: {
     
     response.status_code}")
        return False

# 从文件中读取 Cookie 和 st
with open(r"E:\...\cookie_and_st.json", "r") as f:
    data = json.load(f)
    cookies = data["cookies"]
    st = data["st"]

# 将 Cookie 转换为 requests 可以使用的格式
cookie_str = "; ".join([f"{
     
     cookie['name']}={
     
     cookie['value']}" for cookie in cookies])

# 获取当前时间
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

# 微博详情页的 URL,需要根据实际情况修改
weibo_url = "https://m.weibo.cn/detail/xxxxxxxxxxxxxxxxx" # 把你要评论的微博的url 传进来

# 使用 Cookie 和 st 评论微博
comment_weibo(f" valid - {
     
     now} 使用 py 评论微博 1", weibo_url, cookie=cookie_str
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值