目的
HTTPoisonのサンプルを試す。
HTTPoisonを使ってIdobataのAPIへアクセスする。
HTTPoisonを使ってIdobataのAPIへアクセスする。
実行環境
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
HTTPoison: v0.7
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
HTTPoison: v0.7
始める前に
HTTPoison(毒)かHTTPotion(薬)かどちらを使うか迷った。
でも、できることは同じ。
でも、できることは同じ。
最近は薬(Elixir)ばかり飲んでるから、たまには毒(HTTPoison)の方を選びます。
(結局、薬じゃないかって?気にしたら負けw)
(結局、薬じゃないかって?気にしたら負けw)
目次
- HTTPoisonを準備してみる
- サンプルを試してみる
- IdobataAPIにアクセスしてみる
1. HTTPoisonを準備してみる
README.md内に以下のような記述がある・・・
引用:
If you’re on UbuntuMake sure you have erlang-dev installed before using httpoison. You can do so by running:apt-get install erlang-dev
あれ?もしかしてWindowsで使えないのだろうか?
でも多分これって、Erlangの環境ないとだめだよ?って言ってるだけな気がする。
とりあえず試すか・・・
でも多分これって、Erlangの環境ないとだめだよ?って言ってるだけな気がする。
とりあえず試すか・・・
mix.exsへ以下の記述を追加する。
def deps do
...
[{:httpoison, "~> 0.7"}]
...
end
def application do
...
[applications: [:httpoison]]
...
end
>mix deps.get
>mix deps.compile
コンパイルまでは問題なしだな。
続いてサンプルへ・・・
続いてサンプルへ・・・
2. サンプルを試してみる
HTTPoison(Github)のREADME.mdにあるサンプルを試してみます。
iexを起動。
>iex -S mix
まずはstartさせる。
iex(1)> HTTPoison.start
{:ok, []}
サンプル通りにget!を実行。
iex(2)> HTTPoison.get! "http://httparrot.herokuapp.com/get"
...
...status_code: 200}
post!を試してみる。
(httpotionの例を参考にしました)
(httpotionの例を参考にしました)
iex(3)> HTTPoison.post! "http://httparrot.herokuapp.com/post", "hello=world", %{"User-Agent": "Test"}
...
...status_code: 200}
サンプルも実行できるしWindowsでも大丈夫そうだね。
とりあえずは問題なしですね。
ここからが本番!!
とりあえずは問題なしですね。
ここからが本番!!
3. IdobataAPIにアクセスしてみる
HTTPoisonを使ってIdobataにメッセージを送ってみましょう。
注意!!
あらかじめ、Hookは作成しておいて下さい!
あらかじめ、Hookは作成しておいて下さい!
では始めましょう~
どうせ失敗して何回も叩くことになるだろうから・・・
どうせ失敗して何回も叩くことになるだろうから・・・
iex(4)> url = "HookのEndpoint URL"
Endpoint URL
iex(5)> msg = URI.encode_query(%{source: "hello world from httpoison", format: "html"})
"format=html&source=hello+world+from+httpoison"
それでは早速先ほど成功したpostで試してみよう。
一発で成功するわけもないが・・・(確信)
一発で成功するわけもないが・・・(確信)
iex(6)> HTTPoison.post! url, msg, %{"User-Agent": "Test"}
...
...status_code: 500}
ほら、エラーコード返ってきたよ・・・
何が悪いのか一つずつ考えてみる・・・(問題の分割大事~大事~)
使う関数が間違っている?いや、ドキュメント見る限りはこれで大丈夫なはず・・・これは大丈夫そうだ。
第一引数: URL部分・・・そもそもURLが間違ってたら帰ってくるのは500エラーじゃない・・・これは大丈夫そうだ。
第二引数: body部分・・・Elixirの関数使ってるし値が間違っているならまず、その関数でエラーが出る・・・これは大丈夫そうだ。
第三引数: header部分・・・こいつ怪しい・・・とりあえずこいつに焦点を合わせて色々試してみる。
使う関数が間違っている?いや、ドキュメント見る限りはこれで大丈夫なはず・・・これは大丈夫そうだ。
第一引数: URL部分・・・そもそもURLが間違ってたら帰ってくるのは500エラーじゃない・・・これは大丈夫そうだ。
第二引数: body部分・・・Elixirの関数使ってるし値が間違っているならまず、その関数でエラーが出る・・・これは大丈夫そうだ。
第三引数: header部分・・・こいつ怪しい・・・とりあえずこいつに焦点を合わせて色々試してみる。
この間、試すこと数回・・・冗長なので飛ばします。
iex(10)> HTTPoison.post! url, msg, [{"Content-Type", "application/x-www-form-urlencoded"}]
...
...status_code: 200}
キタ━━゚+.ヽ(≧▽≦)ノ.+゚━━ ッ !!!
これでElixirからidobataにメッセージを送れる。
管理人の独り言~
HTTPヘッダに関しての知識を忘れてる・・・orz
学習し直さないと、この先でもきっと問題が起こるな。
学習し直さないと、この先でもきっと問題が起こるな。