curl 转 Rust 转换器

在浏览器中即时将 curl 命令转换为 Rust reqwest 代码,命令始终留在你的设备上。

你的 curl 命令会在浏览器中本地转换为 Rust,并且不会被上传,但仍建议不要在任何工具中粘贴真实的生产环境令牌或凭据。

同样支持把 curl 转换为 JavaScript fetch

关于 cURL 转 Rust

cURL to Rust 接收一条你从终端、浏览器开发者工具或 API 文档中复制的 curl 命令,并将其重写为基于 reqwest crate 的异步 Rust 程序。它会解析 -X、-H、-d、--data-raw、--json、-u、-G 等参数,选择正确的 reqwest::Method,并在请求体是有效 JSON 时使用 .json(...),在表单或原始数据时使用 .body(...),从而确保请求与 curl 实际发送的内容一致。-u/--user 参数会被转换为符合惯例的 .basic_auth(...) 调用,而不是手写的请求头。当你想把一次快速的 API 测试移植到 Rust 服务、命令行工具或集成测试中,又不想手写 reqwest 样板代码时,这个工具很有用。整个转换过程都在你的浏览器中完成,因此 curl 命令及其中包含的任何令牌都只在你的设备上本地处理,不会被上传。

功能特性

如何使用 cURL 转 Rust

  1. 将你的 curl 命令粘贴到 cURL 命令输入框中。
  2. 在输出面板中查看生成的 Rust reqwest 程序。
  3. 查看警告横幅,了解哪些参数被调整或跳过。
  4. 点击复制,或将代码下载为 request.rs。

示例

输入

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada"}'

输出

use reqwest::header::{HeaderMap, HeaderName, HeaderValue};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = reqwest::Client::new();

    let mut headers = HeaderMap::new();
    headers.insert(HeaderName::from_bytes(b"Content-Type")?, HeaderValue::from_str("application/json")?);

    let response = client
        .request(reqwest::Method::POST, "https://api.example.com/users")
        .headers(headers)
        .json(&serde_json::json!({
            "name": "Ada"
        }))
        .send()
        .await?;

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

    Ok(())
}

JSON 请求体通过 .json(...) 传入,由 reqwest 为你完成序列化。

常见错误与故障排除

常见问题

如何将 curl 命令转换为 Rust?
将 curl 命令粘贴到输入框中,cURL to Rust 会在右侧渲染出一个异步 reqwest 程序,你可以复制它,或将其下载为 request.rs。
cURL to Rust 生成的是 reqwest 代码,还是其他 HTTP 客户端的代码?
它面向广受欢迎的 reqwest crate,并以 tokio 作为异步运行时,使用 #[tokio::main] 生成 async fn main()。运行代码前,请先在 Cargo.toml 中添加这两个 crate。
转换器什么时候使用 .json(...) 而不是 .body(...)?
当请求体是有效 JSON(通过 --json 或 JSON 类型的 Content-Type 发送)时,它会使用 .json(&serde_json::json!(...));对于表单编码或原始字符串请求体,则使用 .body(...)。
curl -u 的基本认证值在 Rust 输出中是如何处理的?
-u 或 --user 的值会在请求构建器上表示为 .basic_auth(用户名, Some(密码)),而不是手动拼接的 Authorization 请求头。
把 curl 转换为 Rust 时,我的命令会被上传吗?
不会。curl 转 Rust 的整个转换过程完全在你的浏览器中完成,因此命令及其中包含的任何凭据都只留在你的设备上。
生成的 reqwest 代码依赖哪些 crate?
输出代码需要 reqwest(启用 json 特性)、serde_json 以及 tokio(启用 full 特性)作为依赖;编译前请用 cargo add 添加它们。

相关工具

全部 ArrayKit 工具