如何在httpkit中将Content-Type设置为application / json

时间:2015-07-01 13:07:37

标签: json clojure http-headers content-type http-kit

我使用httpkit作为http客户端。我尝试了许多解决方案,使标题Content-Type成为application/json,但都失败了。

这是我的代码:

(require '[org.httpkit.client :as http])

(http/post 
  url
  { :query-params {"q" "foo, bar"}
    :form-params {"q" "foo, bar"}
    :headers {"Content-Type" "application/json; charset=utf-8"}})

使用上面的代码发布会获得response status 200,但Content-Typeapplication/x-www-form-urlencoded

如果删除行application/x-www-form-urlencoded,则会获得response status 400

PS:我将flask作为网络服务器。

2 个答案:

答案 0 :(得分:2)

您想发送什么请求?

  • :query-params会将?q=foo,bar附加到请求网址
  • :form-params会使内容类型为q=foo,bar
  • 的正文application/x-www-form-urlencoded

这可能超过了需要,但身体必须application/json,除了已经application/x-www-form-urlencoded

如果你想要一个json体,你可以这样做:

:body (clojure.data.json/write-str {:q "foo,bar"})

答案 1 :(得分:1)

我没有使用httpkit(可以推荐clj-http)但我认为您应该使用:body选项而不是:form-params来指定有效负载,因为后者会{ {3}} Content-Typeapplication/x-www-form-urlencoded。考虑force在HTTP中的工作方式,这是有道理的。