curl 转 Rust 转换器

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

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

由 Udit Agarwal 开发和维护

同样支持把 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 命令及其中包含的任何令牌都只在你的设备上本地处理,不会被上传。

功能特性

  • 生成以 #[tokio::main] 和 reqwest::Client 组织起来的 async fn main()
  • 将 curl 的方法映射为对应的 reqwest::Method,包括自定义动词
  • 根据每个 -H/--header 参数构建 HeaderMap
  • 有效 JSON 请求体使用 .json(&serde_json::json!(...)),表单或原始请求体使用 .body(...)
  • 将 -u/--user 转换为惯用的 .basic_auth(用户名, Some(密码)) 调用
  • 对 JSON 请求体进行格式化,便于阅读和编辑该字面量
  • 对 reqwest 中没有对应实现的参数给出警告,例如 -k 和输出到文件的选项
  • 一键复制结果,或将其下载为 request.rs

如何使用 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 为你完成序列化。

常见错误与故障排除

  • 输出使用了 .body(...),但你原本期望的是 .json(...)。 — 使用 --json 发送请求体,或添加 -H "Content-Type: application/json",这样转换器就能识别为 JSON 并切换为 .json(...)。
  • 编译时提示找不到 serde_json 或 tokio 这个 crate。 — 在 Cargo.toml 中添加 reqwest(启用 json 特性)、serde_json 以及 tokio(启用 full 特性)作为依赖;生成的代码依赖这些 crate。
  • JSON 请求体输出为带引号的字符串,而不是对象字面量。 — 这是因为请求体不是有效的 JSON。请修正 JSON,或者将其保留为字符串并用 .body(...) 发送。
  • curl 命令中使用了 -u,但输出里却没有 .basic_auth(...) 调用。 — 请确认 -u 的值格式正好是 用户名:密码。转换器会在内部解码它自己生成的 Basic 认证请求头,从而还原出用户名和密码。

常见问题

如何将 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 添加它们。

相关工具

  • cURL 转 Fetch — 将 curl 命令转换为 JavaScript 的 fetch() 调用。
  • curl 转 Python — 将 curl 命令转换为可运行的 Python requests 代码。
  • curl 转 Go — 将 curl 命令转换为可运行的 Go net/http 代码。
  • curl 转 Node.js — 将 curl 命令转换为 Node.js axios 请求代码。
  • curl 转 PHP — 将 curl 命令转换为地道的 PHP cURL 代码。
  • API 客户端 — 发送 HTTP 请求,构建头部和参数并查看响应;保存最近 25 条记录。

更多API 工具工具

  • HAR转cURL — 把HAR中的请求转换为可运行的cURL命令。
  • Postman转cURL工具 — 把Postman集合转换成可运行的cURL命令。
  • cURL 转 C# — 把 curl 命令转成使用 HttpClient 的 C# 代码。
  • cURL 转 Java — 把 curl 命令转成使用 HttpClient 的 Java 代码。
  • cURL 转 Ruby — 把 curl 命令转成使用 Net::HTTP 的 Ruby 代码。
  • cURL 转 PowerShell — 把 curl 命令转成 PowerShell 的 Invoke-RestMethod。
  • cURL转Swift — 把curl命令转成使用URLSession的Swift代码。
  • cURL转Dart — 把curl命令转成使用package:http的Dart代码。
  • cURL 转 Fetch — 将 curl 命令转换为 JavaScript 的 fetch() 调用。
  • URL 解析器 — 将 URL 拆解为各个部分并列出查询参数。
  • API 客户端 — 发送 HTTP 请求,构建头部和参数并查看响应;保存最近 25 条记录。
  • URL 构建器和 UTM 生成器 — 使用 UTM 参数构建和验证完全编码的生产 URL。

查看全部API 工具工具 (24) · 全部工具