将 curl 转换为 Elixir
使用 HTTPoison 将 curl 命令转换为 Elixir 代码。curl2code 通过 WebAssembly 完全在您的浏览器中运行——您的数据保持私密。对于 Ruby,请尝试我们的 curl 转 Ruby 转换器。对于 Go,请参阅 curl 转 Go。下方是即插即用的 Elixir 示例。
如何从浏览器复制 curl
- 1
打开开发者工具
按 F12 或 Ctrl+Shift+I 打开浏览器开发者工具。
- 2
进入 Network 标签页
点击 Network (网络) 标签页,并执行触发 HTTP 请求的操作。
- 3
复制为 cURL
右键点击请求 → Copy (复制) → Copy as cURL (复制为 cURL)。然后将其粘贴到上方。
常见问题解答
什么是 Elixir HTTPoison?
HTTPoison 是 Elixir 最流行的 HTTP 客户端,构建在 Erlang 的 hackney 库之上。它为 GET、POST、流式传输和异步请求提供了一个简洁的函数式 API。添加到 mix.exs 依赖中:{:httpoison, "~> 2.0"}。curl2code 将 HTTPoison 作为 Elixir 转换的默认选择。
HTTPoison 对比 Req 对比 Tesla 对比 Finch —— 该用哪一个?
HTTPoison 是最成熟且使用最广泛的。Req 较新,内置了重试和认证功能。Tesla 提供了类似 Faraday 的中间件架构。Finch 是底层的、高性能的,适合生产环境使用。有关类似的函数式方法,请参阅 curl 转 Clojure 或 curl 转 Ruby。
如何在 Elixir 中处理身份验证?
将请求头作为字符串元组列表传递:HTTPoison.get(url, [{"Authorization", "Bearer token"}])。对于 Basic 认证,使用 Base.encode64/1 编码 user:pass 并在值前添加 "Basic "。对响应进行模式匹配:{:ok, response} 或 {:error, reason}。curl2code 将 -H 和 -u 标志转换为地道的 Elixir 代码。
如何在 Elixir 中发送多部分表单数据?
使用 {:multipart, parts} 作为主体:HTTPoison.post(url, {:multipart, [{:file, path, {"form-data", [{"name", "file"}, {"filename", "doc.pdf"}]}, []}]})。对于简单的表单字段,添加 {"key", "value"} 元组。curl2code 处理 HTTPoison 多部分的 -F 标志。
如何在 Elixir HTTP 请求中处理错误?
HTTPoison 返回带标签的元组:{:ok, response} 或 {:error, reason}。使用 case 或 with 进行模式匹配:case HTTPoison.get(url) do {:ok, %{status_code: 200}'} -> ... ; {:error, %{reason: reason}'} -> ... end。这是地道的 Elixir 方式——显式、详尽的错误处理,不使用异常。
如何在 Elixir 中发起并发 HTTP 请求?
使用 Task.async/1 和 Task.await/1:tasks = urls |> Enum.map(&Task.async(fn -> HTTPoison.get(&1) end)) 然后 results = tasks |> Enum.map(&Task.await/1)。Elixir 的 BEAM 虚拟机可以高效处理数千个并发进程。有关类似的并发处理,请参阅 curl 转 Go。
如何在 Elixir 中设置超时?
向 HTTPoison 传递选项:HTTPoison.get(url, [], [timeout: 30_000, recv_timeout: 30_000])。timeout 是连接超时,recv_timeout 是响应超时(均以毫秒为单位)。对于重试,将其包装在具有递减尝试次数的递归函数中,或使用 Req 库内置的重试功能。
如何在 Elixir 中使用代理?
向 HTTPoison 传递代理选项:HTTPoison.get(url, [], [proxy: {"proxy.host", 8080}])。对于需要认证的代理,使用 proxy_auth: {"user", "pass"}。HTTPoison 还通过底层的 hackney 库支持 SOCKS5 代理。curl2code 将 -x 标志转换为 Elixir 代理配置。
如何在 Elixir 中发送带有 JSON 正文的 POST 请求?
使用 curl2code 将类似于 curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL 的 curl POST 命令转换为 Elixir。生成的代码使用 HTTPoison.post(url, Jason.encode!(body), [{'Content-Type', 'application/json'}])。curl2code 会自动检测带有 JSON 内容的 -d/--data 标志,并在 HTTPoison 代码中设置相应的 Content-Type 请求头。
如何在 Elixir 中添加 Bearer 令牌授权?
将 curl -H "Authorization: Bearer YOUR_TOKEN" URL 传递给 curl2code,它会生成带有认证请求头的 HTTPoison 代码:[{'Authorization', 'Bearer YOUR_TOKEN'}]。curl2code 会从 -H "Authorization: Bearer ..." 和 --oauth2-bearer 标志中检测 Bearer 令牌。对于 Basic auth,请使用 -u user:pass。
如何在 Elixir 中设置 Content-Type 请求头?
curl2code 将 curl -H "Content-Type: application/json" URL 转换为带有正确请求头的 HTTPoison 代码:[{'Content-Type', 'application/json'}]。对于 -d 数据,curl 默认使用 application/x-www-form-urlencoded;对于 -F 表单上传,它使用 multipart/form-data。curl2code 会将每一项映射到正确的 HTTPoison API。