You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust用reqwest请求watchparty接口返回JS依赖页面,如何匹配curl效果?

解决reqwest请求返回"You need to enable JavaScript to run this app."的问题

问题核心是你的reqwest请求和curl请求的请求头差异,目标网站通过请求头(尤其是User-Agent)识别请求来源,返回了不同内容。以下是不需要curl crate的解决办法:

1. 对比curl与reqwest的请求头差异

执行带详细日志的curl命令,查看它默认发送的请求头:

curl -v -X POST -H "Content-Type: application/json" -d '{"video":""}' watchparty.me/createRoom -L

你会看到curl默认发送的关键头信息,比如:

  • User-Agent: curl/7.81.0(版本号可能随你的curl版本变化)
  • Accept: */*

而reqwest默认的请求头(比如User-Agent: reqwest/0.11.x)会被网站判定为非合法请求,从而返回需要JS加载的页面。

2. 编写匹配curl请求头的reqwest代码

首先确保Cargo.toml中reqwest启用了必要特性:

[dependencies]
reqwest = { version = "0.11", features = ["json", "native-tls", "redirect"] }
tokio = { version = "1.0", features = ["full"] }
serde_json = "1.0"

然后编写请求代码,完全对齐curl的请求头:

use reqwest::Client;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 构建支持重定向的客户端(对应curl的-L参数)
    let client = Client::builder()
        .redirect(reqwest::redirect::Policy::follow())
        .build()?;

    let response = client.post("https://watchparty.me/createRoom")
        // 保持Content-Type与curl一致
        .header("Content-Type", "application/json")
        // 复制curl的User-Agent,让网站识别为curl请求
        .header("User-Agent", "curl/7.81.0")
        // 设置Accept头为curl默认的*/*
        .header("Accept", "*/*")
        // 传入JSON请求体
        .body(json!({"video": ""}).to_string())
        .send()
        .await?;

    let body = response.text().await?;
    println!("{}", body);

    Ok(())
}

3. 验证与调整

如果还是不行,把curl输出的所有请求头都复制到reqwest中(比如Host、Connection等),确保请求的每一个细节都和curl一致。

内容的提问来源于stack exchange,提问作者lolozen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:35:16