Исключение Clj-http: ExceptionInfo clj-http: статус 415 clj-http.client / wrap-exceptions / fn - 1863 (client.clj: 196) - PullRequest
1 голос
/ 04 февраля 2020

Я использую clj-http для вызовов API, но получаю очень общее c сообщение об ошибке.

ExceptionInfo clj-http: status 415 clj-http.client/wrap-exceptions/fn--1863 (client.clj:196) 

Как я могу увидеть полный ответ от API?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Клиентская библиотека HTTP, по-видимому, сообщает, что сервер отклонил ваш запрос с кодом состояния HTTP 415. Целевая группа инженеров Inte rnet определила код состояния HTTP 415 в RF C 7231 .

0 голосов
/ 04 февраля 2020

По умолчанию для clj-http выбрасываются исключения для> = 400 кодов состояния. Поэтому, когда вы видите исключение, копайте глубже, например, (pst) или как вы обычно имеете дело с этим исключением. Например,

(c/get "https://httpbin.org/status/400")
; Execution error (ExceptionInfo) at slingshot.support/stack-trace (support.clj:201).
; clj-http: status 400
(pst)
; ...
; clojure.lang.ExceptionInfo: clj-http: status 400
;                      body: ""
;                    cached: nil
;                  chunked?: false
;                   headers: {"Date" "Tue, 04 Feb 2020 19:37:14 GMT",
;                             "Content-Type" "text/html; charset=utf-8",
;                             "Content-Length" "0",
;                             "Connection" "close",
;                             "Server" "gunicorn/19.9.0",
;                             "Access-Control-Allow-Origin" "*",
;                             "Access-Control-Allow-Credentials" "true"}
;               http-client: #object[org.apache.http.impl.client.InternalHttpClient 0x3cc148d "org.apache.http.impl.client.InternalHttpClient@3cc148d"]
;                    length: 0
;     orig-content-encoding: nil
;          protocol-version: {:name "HTTP", :major 1, :minor 1}
;             reason-phrase: "BAD REQUEST"
;               repeatable?: false
;              request-time: 429
;                    status: 400
;                streaming?: false
;           trace-redirects: []
;                      type: :clj-http.client/unexceptional-status
; ...

Если вы не хотите использовать эту функцию, вы можете отключить ее с помощью опции :throw-exceptions false:

(c/get "https://httpbin.org/status/400" {:throw-exceptions false})
; {:body "",
;  :cached nil,
;  :chunked? false,
;  :headers {"Access-Control-Allow-Credentials" "true",
;            "Access-Control-Allow-Origin" "*",
;            "Connection" "close",
;            "Content-Length" "0",
;            "Content-Type" "text/html; charset=utf-8",
;            "Date" "Tue, 04 Feb 2020 19:40:20 GMT",
;            "Server" "gunicorn/19.9.0"},
;  :http-client #<org.apache.http.impl.client.InternalHttpClient@27bde886>,
;  :length 0,
;  :orig-content-encoding nil,
;  :protocol-version {:major 1, :minor 1, :name "HTTP"},
;  :reason-phrase "BAD REQUEST",
;  :repeatable? false,
;  :request-time 432,
;  :status 400,
;  :streaming? false,
;  :trace-redirects []}

Или, если вы действительно хотите увидеть, что происходит Вы также можете использовать :debug true, чтобы позволить базовому http библиотечно записывать «все»:

(c/get "https://httpbin.org/status/400" {:debug true :throw-exceptions false})
; Request: nil
; {:user-info nil,
;  :use-header-maps-in-response? true,
;  :body-type nil,
;  :debug true,
;  :headers {"accept-encoding" "gzip, deflate"},
;  :server-port nil,
;  :url "https://httpbin.org/status/400",
;  :flatten-nested-keys (:query-params),
;  :throw-exceptions false,
;  :uri "/status/400",
;  :server-name "httpbin.org",
;  :query-string nil,
;  :body nil,
;  :scheme :https,
;  :request-method :get}
; HttpRequest:
; {:config nil,
;  :method "GET",
;  :requestLine
;  #object[org.apache.http.message.BasicRequestLine 0x648100de "GET https://httpbin.org/status/400 HTTP/1.1"],
;  :aborted false,
;  :params
;  #object[org.apache.http.params.BasicHttpParams 0x3d1319b "org.apache.http.params.BasicHttpParams@3d1319b"],
;  :protocolVersion
;  #object[org.apache.http.HttpVersion 0x34b63def "HTTP/1.1"],
;  :URI
;  #object[java.net.URI 0x51ba8929 "https://httpbin.org/status/400"],
;  :class org.apache.http.client.methods.HttpGet,
;  :allHeaders
;  [#object[org.apache.http.message.BasicHeader 0x39a8905b "Connection: close"],
;   #object[org.apache.http.message.BasicHeader 0x6d6c4775 "accept-encoding: gzip, deflate"]]}
; {:body "",
;  :cached nil,
;  :chunked? false,
; ...
...