gpt4 book ai didi

elixir - HTTPoison 手动关闭连接

转载 作者:行者123 更新时间:2023-12-04 01:46:10 25 4
gpt4 key购买 nike

这是一个非常简单的模块,它会不断检查请求者的 IP。我使用反向连接代理,这意味着它在每次 http 请求时都会获得新的 IP。

defmodule Test do
def go() do
Enum.each(1..1, fn x ->
Task.Supervisor.async_nolink(Scraper.TaskSupervisor, fn ->
r = HTTPoison.get("https://api.ipify.org?format=json", [],
[timeout: 10_000, recv_timeout: 10_000, proxy: "ip:port", ssl: [{:versions, [:'tlsv1.2']}]])

case r do

{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
IO.inspect body |> Jason.decode
:timer.sleep(1000)
go()
end
end)
end)

end
end
Test.go()
:timer.sleep(2000000)

问题?只要进程处于事件状态,HTTPoison(hackney) 就不会释放连接,因此 IP 始终相同。我将如何手动关闭内部连接:

{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
IO.inspect body |> Jason.decode

最佳答案

来自 HTTPPoison 自述文件:

Normally hackney opens and closes connections on demand, but it also creates a default pool of connections which are reused for requests to the same host. If the connection and host support keepalive, the connection is kept open until explicitly closed.

HTTPPoison 不导出底层套接字的 close,并且有一个 open issue自 2017 年以来。

与此同时,您可以调用 hackney_pool:stop_pool(:default)。这显然不是最佳解决方案,而且开销巨大。所以我的建议是要么向 HTTPPoison 提供拉取请求,以启用关闭连接功能(通过委托(delegate)给 ;hackney_response.close/1 )要么简单地摆脱多余的 HTTPPoison 并且只使用 hackney

关于elixir - HTTPoison 手动关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55213222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com