我正在尝试使用clj-http 2.2.0版从REST资源中读取JSON,但无论我做什么,我都将结果作为字符串.
在调试时,我在https://nym.at/test.json上的网络服务器上删除了我对此请求所做的操作:静态JSON文档:
{"foo":1,"bar":"baz"}
Run Code Online (Sandbox Code Playgroud)
我在REPL中运行以下代码(client绑定到命名空间clj-http.client):
(client/get "https://nym.at/test.json" {:as :json :insecure? true})
Run Code Online (Sandbox Code Playgroud)
我得到的结果是(手动打印):
{:status 200,
:headers {"Server" "Apache/2.4.18 (Debian)",
"Upgrade" "h2,h2c",
"Content-Type" "application/json",
"Content-Length" "22",
"Strict-Transport-Security" "max-age=31536000; includeSubDomains",
"Connection" "Upgrade, close",
"Accept-Ranges" "bytes",
"ETag" "\"16-532fcf29f30c6\"",
"Date" "Mon, 16 May 2016 22:14:59 GMT",
"Last-Modified" "Mon, 16 May 2016 22:14:27 GMT"},
:body "{\"foo\":1,\"bar\":\"baz\"}\n",
:request-time 637,
:trace-redirects ["https://nym.at/test.json"],
:orig-content-encoding nil}
Run Code Online (Sandbox Code Playgroud)
我的期望是错误的,{:as :json}应该导致clj-http将响应解析为JSON并将其撤回:body或者我在这里做错了吗?
通过我的发布请求,我希望发布的 CRM API 文档也要求我发布 JSON 文件。
JSON 文件是一个多级文件,在 clojure 中被视为持久数组映射。
我要发布的代码是:
(def contacts (http/post "https://api.close.com/api/v1/data/search"
{:basic-auth [api ""]
:body closeFilter
}))
Run Code Online (Sandbox Code Playgroud)
CloseFilter 代表我希望发布的多级 JSON。
但是,我收到以下错误:
class clojure.lang.PersistentArrayMap cannot be cast to class [B (clojure.lang.PersistentArrayMap is in unnamed module of loader 'app'; [B is in module java.base of loader 'bootstrap')
我在这里犯了什么错误?
我正在用 Javascript 重新创建一个程序。发布相同的文件效果很好。
我仍然在努力解决这个问题,所以这是我的代码示例。
我的代码首先需要我需要的包:
(ns schedule-emails.core
(:require [clj-http.client :as http]
[clojure.data.json :as json]
[cheshire.core :refer :all]))
Run Code Online (Sandbox Code Playgroud)
然后,我将文件系统中的本地 JSON 文件解析到应用程序中。JSON。这将返回带有嵌入向量的地图的地图。
(def closeFilter
(json/read-str
(slurp "URL …Run Code Online (Sandbox Code Playgroud) 我的 Web 客户端(以 编写cljs)连接到后端(以clj),需要进行一些第三方 API 调用。它必须在服务器上完成,然后结果应该以特定的方式转换并发送回客户端。
这是我的网址之一的处理程序
(defn get-orders [req]
(let [{:keys [sig uri]} (api-signature :get-orders)]
(client/get uri
{:async? true}
(fn [response] {:body "something"})
(fn [exception] {:body "error"}))))
Run Code Online (Sandbox Code Playgroud)
{:body "something"}它没有返回,而是返回以下错误:
No implementation of method: :render of protocol: #'compojure.response/Renderable found for class: org.apache.http.impl.nio.client.FutureWrapper
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个充当代理服务的Clojure应用程序。目标是通过路径“ / grafana” 将请求代理到http://127.0.0.1:3000(Grafana服务),因此,如果我通过浏览器访问http://127.0.0.1/grafana,它应该代理我的请求到端口3000并显示Grafana的UI。
我遇到的问题是在浏览器中收到ERR_INVALID_CHUNKED_ENCODING响应。在Wireshark中,对端口3000的请求显示HTTP响应重新组合了3个TCP数据包。但是,对通过我的代理的请求的响应未进行重组,从而导致分块错误。有人对如何解决这个问题有任何想法吗?
谢谢。