将 curl 转换为 C

curl2code 使用 libcurl 将 curl 命令转换为 C 代码。转换过程通过 WebAssembly 在您的浏览器中运行,以确保完全的隐私。对于 Rust,请查看我们的 curl 转 Rust 转换器。对于 Go,请参阅 curl 转 Go。下方是带有正确内存管理的实用 C 示例。

如何从浏览器复制 curl

  1. 1

    打开开发者工具

    F12Ctrl+Shift+I 打开浏览器开发者工具。

  2. 2

    进入 Network 标签页

    点击 Network (网络) 标签页,并执行触发 HTTP 请求的操作。

  3. 3

    复制为 cURL

    右键点击请求 → Copy (复制) → Copy as cURL (复制为 cURL)。然后将其粘贴到上方。

常见问题解答

什么是 libcurl?

libcurl 是 curl 命令行工具背后的 C 语言库。它是现存最具移植性且部署最广泛的 HTTP 客户端库,支持 25 种以上的协议。被数以千计的应用程序和嵌入式系统使用。通过系统包管理器添加或静态链接。curl2code 使用 easy 接口生成 libcurl C 代码。

libcurl easy 对比 multi 接口 —— 该用哪一个?

easy 接口 (curl_easy_*) 用于单个同步传输——简单直接。multi 接口 (curl_multi_*) 可以在单个线程中实现非阻塞并发传输。脚本和简单工具使用 easy,高性能应用使用 multi。对于更高级的 C 家族语言,请参阅 curl 转 Rust

如何使用 libcurl 处理身份验证?

对于 Bearer:使用 curl_slist_append(headers, "Authorization: Bearer token") 设置自定义请求头。对于 Basic 认证:curl_easy_setopt(curl, CURLOPT_USERPWD, "user:pass")。libcurl 会自动对 Basic 认证凭据进行编码。curl2code 将 -u 和请求头标志转换为正确的 C API 调用。

如何使用 libcurl 发送多部分表单数据?

使用 MIME API (libcurl 7.56+):curl_mime_init() 创建 mime 结构,curl_mime_addpart() 添加每个字段,curl_mime_name()curl_mime_filedata() 用于文件上传。使用 CURLOPT_MIMEPOST 设置。使用 curl_mime_free() 释放。

如何处理 libcurl 中的错误?

每个 curl_easy_* 函数都返回一个 CURLcode —— 检查其是否为 CURLE_OK。使用 curl_easy_strerror(code) 获取人类可读的消息。设置 CURLOPT_ERRORBUFFER 以获取详细的错误字符串。使用 curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code) 获取 HTTP 状态码。

如何管理 libcurl 的内存?

完成句柄操作后始终调用 curl_easy_cleanup()。使用 curl_slist_free_all() 释放请求头列表。使用 curl_mime_free() 释放 MIME 结构。对于写入回调,需自行管理缓冲区分配。在程序退出时调用一次 curl_global_cleanup()。未能释放资源会导致内存泄漏。

如何设置 libcurl 的超时?

设置 CURLOPT_CONNECTTIMEOUT 为连接超时,设置 CURLOPT_TIMEOUT 为总传输时间(均以秒为单位)。如需毫秒级精度,使用 CURLOPT_CONNECTTIMEOUT_MSCURLOPT_TIMEOUT_MS。这些选项与 curl CLI 使用的 --connect-timeout--max-time 完全一致。

如何配置 libcurl 的代理?

CURLOPT_PROXY 设置为代理 URL:curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:8080")。对于 SOCKS5:将 CURLOPT_PROXYTYPE 设置为 CURLPROXY_SOCKS5。对于代理认证:使用 CURLOPT_PROXYUSERPWD。libcurl 也会遵循 http_proxy 环境变量。

如何在 C 语言中发送带有 JSON 正文的 POST 请求?

使用 curl2code 将类似于 curl -X POST -H "Content-Type: application/json" -d "{"key":"value"}" URL 的 curl POST 命令转换为 C。生成的代码使用 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_string)。curl2code 会自动检测带有 JSON 内容的 -d/--data 标志,并在 libcurl 代码中设置相应的 Content-Type 请求头。

如何在 C 语言中添加 Bearer 令牌授权?

curl -H "Authorization: Bearer YOUR_TOKEN" URL 传递给 curl2code,它会生成带有认证请求头的 libcurl 代码:struct curl_slist *headers = curl_slist_append(NULL, "Authorization: Bearer TOKEN")。curl2code 会从 -H "Authorization: Bearer ..."--oauth2-bearer 标志中检测 Bearer 令牌。对于 Basic auth,请使用 -u user:pass

如何在 C 语言中设置 Content-Type 请求头?

curl2code 将 curl -H "Content-Type: application/json" URL 转换为带有正确请求头的 libcurl 代码:curl_slist_append(headers, "Content-Type: application/json")。对于 -d 数据,curl 默认使用 application/x-www-form-urlencoded;对于 -F 表单上传,它使用 multipart/form-data。curl2code 会将每一项映射到正确的 libcurl API。

有用链接

curl 指南

将 curl 转换为其他语言