将 curl 转换为 Elixir

使用 HTTPoison 将 curl 命令转换为 Elixir 代码。curl2code 通过 WebAssembly 完全在您的浏览器中运行——您的数据保持私密。对于 Ruby,请尝试我们的 curl 转 Ruby 转换器。对于 Go,请参阅 curl 转 Go。下方是即插即用的 Elixir 示例。

如何从浏览器复制 curl

  1. 1

    打开开发者工具

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

  2. 2

    进入 Network 标签页

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

  3. 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 转 Clojurecurl 转 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}。使用 casewith 进行模式匹配:case HTTPoison.get(url) do {:ok, %{status_code: 200}'} -> ... ; {:error, %{reason: reason}'} -> ... end。这是地道的 Elixir 方式——显式、详尽的错误处理,不使用异常。

如何在 Elixir 中发起并发 HTTP 请求?

使用 Task.async/1Task.await/1tasks = 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。

有用链接

curl 指南

将 curl 转换为其他语言