我使用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-Type
是application/x-www-form-urlencoded
。
如果删除行application/x-www-form-urlencoded
,则会获得response status 400
。
PS:我将flask作为网络服务器。
答案 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-Type
到application/x-www-form-urlencoded
。考虑force在HTTP中的工作方式,这是有道理的。