1

Clojure 1.4(Java 7)およびclj-http(0.6.0)ライブラリーを使用します。getリクエストを実行すると、Content-Lengthヘッダーが自動的に含まれ、ゼロに設定されます。一部のサーバー(たとえばlighttpd)はこれを嫌い、BadRequestで応答します。上記のヘッダーを削除したり、ライブラリにデフォルトで含まないようにすることはできますか?ドキュメントに関連するものは何も見つかりませんでした。グーグルでこれだけが表示されましたが、実際には役に立ちません。

4

1 に答える 1

1

私が試してみると:

(client/get "http://thepiratebay.se" {:debug true})

私は得る:

Request: nil
{:scheme :http,
 :http-url "http://thepiratebay.se",
 :request-method :get,
 :query-string nil,
 :uri "",
 :server-name "thepiratebay.se",

 :headers {"accept-encoding" "gzip, deflate"},
 :debug true,
 :body-type nil,
 :server-port nil,
 :body nil,
 :user-info nil}
HttpRequest:
{:requestLine #<BasicRequestLine GET http://thepiratebay.se HTTP/1.1>,
 :protocolVersion #<HttpVersion HTTP/1.1>,
 :params
 #<BasicHttpParams org.apache.http.params.BasicHttpParams@5b14a306>,
 :method "GET",
 :entity nil,
 :class
 clj_http.core.proxy$org.apache.http.client.methods.HttpEntityEnclosingRequestBase$0,
 :allHeaders
 [#<BasicHeader Connection: close>,
  #<BasicHeader accept-encoding: gzip, deflate>],
 :aborted false,
 :URI #<URI http://thepiratebay.se>}   

これにより、400エラーが発生します。Apache HttpClientを直接使用して、Javaで再現しようとしました。

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.HttpClient;
import org.apache.http.HttpResponse;
import org.apache.http.Header;

public class Get {
  public static void main(String args[]) throws Exception {
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(args[0]);
    httpget.addHeader("Connection", "close");
    httpget.addHeader("accept-encoding", "gzip, deflate");
    Header[] headers = httpget.getAllHeaders();
    for (Header h : headers) {
      System.out.println(h.getName() + ", " + h.getValue());
    }
    System.out.println();
    HttpResponse response = httpclient.execute(httpget);
    System.out.println(response);
  }
}

ただし、これは正常に機能します。私の推測では、HttpClientを呼び出す前に、clj-httpは応答で空の本文を強制する何かを実行しているため、HttpClientはヘッダーContent-Lengthを0に設定します。ソースを見ると、ヘッダーはclj-httpによって設定されていません。私はこれをclj-httpの問題として提出します。

https://github.com/dakrone/clj-http/issues

于 2012-12-09T17:14:26.027 に答える