将 curl 转换为 C
curl2code 使用 libcurl 将 curl 命令转换为 C 代码。转换过程通过 WebAssembly 在您的浏览器中运行,以确保完全的隐私。对于 Rust,请查看我们的 curl 转 Rust 转换器。对于 Go,请参阅 curl 转 Go。下方是带有正确内存管理的实用 C 示例。
如何从浏览器复制 curl
- 1
打开开发者工具
按 F12 或 Ctrl+Shift+I 打开浏览器开发者工具。
- 2
进入 Network 标签页
点击 Network (网络) 标签页,并执行触发 HTTP 请求的操作。
- 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_MS 和 CURLOPT_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。