2

我使用httpkit作为 http 客户端。我尝试了许多解决方案来制作标题Content-Typeapplication/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 200but Content-Typeis application/x-www-form-urlencoded

而如果删除该行application/x-www-form-urlencoded,就会得到response status 400

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

4

2 回答 2

2

您要发送什么请求?

  • :query-params将附加?q=foo,bar到请求 url
  • :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"})
于 2015-07-01T22:33:52.890 回答
1

我没有使用httpkit(可以推荐clj-http),但我认为您应该使用该 :body选项而不是指定有效负载,:form-params因为后者会强制Content-Typeto application/x-www-form-urlencoded考虑表单参数在 HTTP 中的工作方式是有意义的。

于 2015-07-01T20:08:23.927 回答