使用Clojure 1.4(Java 7)和clj-http(0.6.0)庫。 當執行獲取請求時,Content-Length標題會自動包含並設置爲零。有些服務器(例如lighttpd)不喜歡這種服務器,並以錯誤請求進行響應。是否有可能刪除所述標題或使庫默認不包含它?我找不到任何與文檔相關的內容,並且使用Google搜索功能只給我提供了this,這並沒有什麼幫助。獲取請求中的零內容長度獲取400來自lighttpd的錯誤請求(clj-http)
1
A
回答
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 [email protected]>,
: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錯誤。我試圖用Java直接使用Apache HttpClient重現它:
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的一個問題。
+0
好,我只是把它作爲一個問題提交。 – kliron
相關問題
- 1. RestTemplate在獲取請求時給出400錯誤請求錯誤
- 2. REST服務獲取400錯誤請求
- 3. AJAX調用獲取「400錯誤請求」
- 4. HttpURLConnection GET請求獲取400錯誤請求
- 5. 從HTTP獲取400(錯誤請求)錯誤的TFS REST API的HTTP PATCH請求
- 6. 在Jquery Ajax POST中獲取400錯誤的請求錯誤
- 7. 獲取沒有內容長度的http請求的響應?
- 8. HTTP錯誤400.請求中存在無效的內容長度或塊長度
- 9. 如何獲取沒有內容長度的請求主體?
- 10. 如何爲POST請求獲取正確的內容長度
- 11. 獲取錯誤請求行
- 12. 400錯誤的請求來自用戶/ show.json的twitter請求
- 13. 獲取間歇性400錯誤的請求錯誤
- 14. WCF POST方法獲取錯誤400錯誤的請求
- 15. AWS:從AmazonCloudWatch.GetMetricStatistics()獲取400錯誤的請求錯誤
- 16. POST字符串中獲取400錯誤的請求Spring MVC中
- 17. 如何獲取PUT請求的內容?
- 18. Python2.7獲取iframe的內容請求
- 19. Java從http請求的PHP讀取JSON - 錯誤的請求400
- 20. Node JS獲取請求體長度
- 21. python3請求400錯誤的請求
- 22. 獲取POST請求需要內容長度標題響應(411錯誤)
- 23. 獲取Ajax請求來自的域
- 24. Java Mailgun API調用獲取錯誤400錯誤請求
- 25. LinkedIn獲取令牌返回HTTP 1.1 400 - 錯誤請求錯誤
- 26. Google Calendar API Freebusy JQuery $ .post獲取400(錯誤請求)錯誤
- 27. 獲取HTTP/1.1 400錯誤的請求[\ R] [\ n]的
- 28. Rails通過來自另一個獲取請求(請求)的獲取請求來訪問外部API
- 29. 獲取請求
- 30. 你可以在Angular中獲取獲取請求的內容嗎?
我不能使用Clojure 1.4和CLJ-HTTP 0.6.0對幾個網站我試過了,從這個名單重現該問題:http://redmine.lighttpd.net/projects/1/wiki/ PoweredByLighttpd你知道有哪些網站可靠地迴應壞請求? –
請嘗試http://thepiratebay.se。在java.net.URL上使用openConnection執行獲取請求時,我無法重現該問題。在檢查頭文件時,我可以看到的唯一區別是包含來自clj-http的零Content-Length。 – kliron