특정 사이트에서만 %HTTPoison.Error{id: nil, reason: :closed} 발생 (Elixir)

6818 단어 Elixir
Elixir 2 Advent Calendar 2020 4일째입니다.
전날은 Surface 사용하기 (Elixir / Phoenix) 였습니다.

2021-09-04 추가


  • 드디어 대화가 성립되었습니다
  • 아래 기사를 참조하십시오
  • 특정 사이트에서만 %HTTPoison.Error{id: nil, reason: :closed} 발생 해결책 (Elixir)

  • 소개


  • 그런 일이 있습니다.
  • 이 기사에서 사용한 버전은 다음과 같습니다.



    버전


    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}}
    
  • 뭐가 뭔지 모르게 초조한 그래서 조사한 것을 적어 둡니다.


    결론


  • 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


  • 깨끗하지는 않지만 일본어 기사를 찾을 수 없으므로 적어 두십시오
  • Enjoy Elixir !!!
  • 좋은 웹페이지 즐겨찾기