clj-http0.4.0ライブラリがJSONパラメータを適切に送信しているようには見えません。ただし、0.3.4でパッチが適用されるはずでした。
- https://github.com/dakrone/clj-http/pull/52
- https://github.com/dakrone/clj-http/blob/master/changelog.org
clj-httpリクエストオプションでに設定debug
すると、リクエストパラメータが次のように表示されるため、何が送信されているかを正確に判断するのは困難です。true
:body #<StringEntity org.apache.http.entity.StringEntity@714c7f58>
表示可能な形式で表示されないのはなぜですか?
そこで、netcatを使用して何が送信されているかを確認しました。これは、次のように表示されます。
これは動作します...
(client/request
{:method :post
:url "http://localhost:7474/db/data/ext/GremlinPlugin/graphdb/execute_script"
:body (json/generate-string {:script "g.v(id)", :params {:id 321} })
:content-type :json})
Netcatの出力...
POST /db/data/ext/GremlinPlugin/graphdb/execute_script HTTP/1.1
Content-Type: application/json; charset=UTF-8
Connection: close
Accept-Encoding: gzip, deflate
Content-Length: 50
Host: localhost:7474
User-Agent: Apache-HttpClient/4.1.3 (java 1.5)
"{\"params\":{\"id\":321},\"script\":\"g.v(id)\"}"
これは機能しません...
(client/request
{:method :post
:url "http://localhost:7474/db/data/ext/GremlinPlugin/graphdb/execute_script",
:form-params {:script "g.v(id)", :params {:id 321}}
:content-type :json})
Netcatの出力...
POST /db/data/ext/GremlinPlugin/graphdb/execute_script HTTP/1.1
Content-Type: application/json; charset=UTF-8
Connection: close
Accept-Encoding: gzip, deflate
Content-Length: 37
Host: localhost:7474
User-Agent: Apache-HttpClient/4.1.3 (java 1.5)
{"params[id]":321,"script":"g.v(id)"}
これはClojureとclj-httpを使った最初の試合なので、おそらく何かが足りないのですが、何が起こっているのでしょうか。