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 命令及其中包含的任何令牌都只在你的设备上本地处理,不会被上传。
功能特性
- 生成以 #[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
- 将你的 curl 命令粘贴到 cURL 命令输入框中。
- 在输出面板中查看生成的 Rust reqwest 程序。
- 查看警告横幅,了解哪些参数被调整或跳过。
- 点击复制,或将代码下载为 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 添加它们。
相关工具
全部 ArrayKit 工具