1

clj-http0.4.0ライブラリがJSONパラメータを適切に送信しているようには見えません。ただし、0.3.4でパッチが適用されるはずでした。

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を使った最初の試合なので、おそらく何かが足りないのですが、何が起こっているのでしょうか。

4

1 に答える 1

2

これは、ネストされたフォームパラメータに対する最近のプルリクエストで導入されたバグでした。ここで修正しました:https ://github.com/dakrone/clj-http/commit/2e5aab82029b46f0b1e28d53734c642582306539

于 2012-05-07T04:32:46.127 に答える