5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ErlangのhttpcモジュールでHTTP通信する(Elixir)

Last updated at Posted at 2021-09-03

はじめに

  • Elixir楽しんでいますか:bangbang::bangbang::bangbang:
  • ErlangのhttpcモジュールでHTTP通信を楽しんでみたいとおもいます
  • この記事は2021/09/04(土) 00:00〜2021/09/06(月) 23:59開催の純粋なもくもく会「autoracex #44」の成果物です

背景

  • ふつうはHTTPoison等のElixir製のHexを使ったほうが書きやすいとおもいますし、使えばよいとおもいます
  • ただしHTTPoison等のHexをどうしても追加できない(できないというよりもしたくない)条件下においては必要となるテクニックだとおもいます
    • たとえばNerves Livebook
    • 自分でファームウェアをビルドすればよいのですが、友達にファームウェアを焼き込むツールfwupだけインストールすればいいよと教えた手前、Nerves開発に必要なあれこれをインストールしてもらうのには忍びないとか
    • 2021/09/04時点の最新版v0.2.17では、Elixir1.12.2-otp-24なのですが、Nerves LivebookではMix.install/2を使って新たにHexを追加することはできないことになっています1

スクリーンショット 2021-09-04 8.18.40.png

HTTP Get

  • httpcここをよく読みましょう
  • 以下、サンプルです

HTTP Get 例①

:inets.start
:ssl.start

{:ok, {status, headers, body}} = :httpc.request("https://www.nerves-project.org/")

body |> List.to_string() |> IO.puts()

スクリーンショット 2021-09-04 8.26.36.png

HTTP Get 例②

:inets.start
:ssl.start

{:ok, {_status, _headers, body}} = :httpc.request("https://qiita.com/api/v2/items?query=elixir")

body
|> List.to_string()
|> Jason.decode!()
|> Enum.map(& Map.take(&1, ["title", "url"]))
  • Jasonは、素のNerves Livebookのファームウェアに入っているのでありがたく使っています

スクリーンショット 2021-09-04 8.23.44.png

HTTP Post

  • 今度もhttpcをよく読みましょう
  • 以下、サンプルです
:inets.start
:ssl.start

hum = 79.4
temp = 27.3
{:ok, datetime} = DateTime.now("Etc/UTC")
time = datetime |> DateTime.to_unix()

json = Jason.encode!(%{value: %{temperature: temp, humidity: hum, time: time}}) |> String.to_charlist()
request = {'https://<your host>/api/values', [], 'application/json', json}

:httpc.request(:post, request, [], [])

スクリーンショット 2021-09-04 8.31.37.png

Wrapping Up :lgtm::lgtm::lgtm::lgtm::lgtm:

  • HTTPoison等のHexをどうしても追加できない(できないというよりもしたくない)条件ということに出くわすことがほとんどないような気がしますが、未来の自分へ向けて調べたことを記事にしておきます
    • 記事を書くにあたり、Erlangのプログラム例を参考にしました2
  • Enjoy Elixir:bangbang::bangbang::bangbang:
  • autoracex #44開催中 :rocket::rocket::rocket:
  1. そのうちNerves Livebookにおいても、Mix.install/2は対応されるような気もします

  2. ElixirをやっているとなんとなくErlangが読めるようになるという話を聞いたことがあるのですが、確かになんとな〜くですが読めるようになりつつあることを少し感じました

5
2
0

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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?