LoginSignup
0

More than 1 year has passed since last update.

とあるサイトでのみ%HTTPoison.Error{id: nil, reason: :closed}が発生 (Elixir)

Last updated at Posted at 2020-11-07

Elixir その2 Advent Calendar 2020 4日目です。
前日は、Surfaceをつかってみる(Elixir/Phoenix)でした。

2021-09-04追記

はじめに

  • そういうことがあるのですねえ
  • この記事で使用したバージョンは以下の通りです
バージョン
Elixir 1.10.4-otp-23
Erlang 23.0.1
httpoison 1.7.0
hackney 1.16.0
  • 大丈夫なサイトもあります
  • たいてい大丈夫です
iex> HTTPoison.get "https://www.google.com" 
{:ok,
 %HTTPoison.Response{
   body: "<!doctype html><html...
}
  • エラーがでるサイトの例
    • 少数派です
iex> HTTPoison.get "https://xxx.jp/"    
{:error, %HTTPoison.Error{id: nil, reason: :closed}}
  • なにがなんだかわからず焦った :sweat: ので、調べたことを書いておきます

結論

  • hackneyのアップデートを待ちましょう

{:error, %HTTPoison.Error{id: nil, reason: "closed"}} #326

  • hackneyを更新したら直ったという人もいれば、駄目だという人もいろいろいます
  • どうもhttpoisonが依存しているhackneyになにかがありそうです

回避策(非推奨)

  • 必ずしも解決できるとは限りません
  • hackneyのバージョンを落としてみました
  • 私がアクセスしたかったサイトは以下の方法でアクセスできましたよ! ということのご紹介です
mix.exs
  defp deps do
    [
      {:httpoison, "~> 1.6"},
      {:jason, "~> 1.2"},
      {:hackney, "1.15.2", override: true}
    ]
  end
$ mix deps.update --all
$ iex -S mix

iex> HTTPoison.get "https://xxx.jp", [], ssl: [{:versions, [:'tlsv1.2']}]
{:ok,
 %HTTPoison.Response{
   body: "<!doctype html><html...
}
  • こんなことをしなくてもアクセスできていた気がするので、httpoisonhackneyの組み合わせでなにかありそうです
    • さらにほると、hackneyが依存しているcertifiというHexのバージョンを落とせば第3引数の指定で動くことを確認しました
    • {:certifi, "2.5.1"},

Wrapping Up :lgtm: :qiita-fabicon: :lgtm:

  • すっきりしませんが、日本語の記事は見つからなかったので書き留めておきます
  • Enjoy Elixir!!! :rocket::rocket::rocket:

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0