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
以上、プロキシーサーバを作っていて微妙なところにハマったという話でした。