LoginSignup
3
0

More than 5 years have passed since last update.

httpkitで、ドツボにはまった話

Posted at

httpkitのclient (http://www.http-kit.org/client.html) を使っていて、ドツボにはまりました。解決したので、忘れないように要点を書いておきます。

バージョンは、[http-kit "2.2.0"]です。

上記のページのサンプルを見ればイメージをつかみやすいと思いますが、org.httpkit.client/requestに渡す値によって、サーバから返って来るのに成功したり失敗したりしてハマりました。原因を絞り込むのに時間を浪費しました。

分かってしまえば、なーんだという感じです。

  (def options  {:url "http://hogehoge.com/foo/bar"
                 :method :delete
                 :headers {"Token" "asdlfksdfjkasjlfkjaksfasfjasdfjk"
                           "Content-Type" "application/json; charset=UTF-8"
                           }
                 :body "{\"foo\":\"something\",\"bar\":1"
                 })

これだと、httpステータスは200でOKなのですが、

  (def options  {:url "http://hogehoge.com/foo/bar"
                 :method :delete
                 :headers {"Token" "asdlfksdfjkasjlfkjaksfasfjasdfjk"
                           "Content-Type" "application/json; charset=UTF-8"
                           }
                 :body "{\"foo\":\"something\",\"bar\":1"
                 :query-params {}
                 :form-params {}
                 })

こっちだと、400のBadRequestが返って来てNGです。

  (def options  {:url "http://hogehoge.com/foo/bar"
                 :method :delete
                 :headers {"Token" "asdlfksdfjkasjlfkjaksfasfjasdfjk"
                           "Content-Type" "application/json; charset=UTF-8"
                           }
                 :body "{\"foo\":\"something\",\"bar\":1"
                 :query-params nil
                 :form-params nil
                 })

これだとhttpステータスは200でOKです。

  (def options  {:url "http://hogehoge.com/foo/bar"
                 :method :delete
                 :headers {"Token" "asdlfksdfjkasjlfkjaksfasfjasdfjk"
                           "Content-Type" "application/json; charset=UTF-8"
                           }
                 :body "{\"foo\":\"something\",\"bar\":1"
                 :query-params {}
                 :form-params nil
                 })

これでもOK。

  • form-paramsが{}だと、contet-typeがcontent-type application/x-www-form-urlencodedで、content-lengthが0が返って来ます。
  • form-paramsがnilだと、contet-typeがcontent-type application/json; charset=UTF-8で、content-lengthが26が返って来ます。
  • 期待しているのは、form-paramsがnilの方です。もしくは指定しなくてもよい。

以下のものも多少は関係ありそうみたいです。
https://github.com/http-kit/http-kit/issues/112

以上、プロキシーサーバを作っていて微妙なところにハマったという話でした。

3
0
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
3
0