2012-10-17 95 views
0

我正在嘗試以字節爲單位讀取網頁,但它始終在我的java控制檯(我在控制檯上顯示內容)上返回「錯誤的請求錯誤400」消息。我找不到來糾正可能的方式是因爲我讀的字節code.Here是我的代碼和結果:讀取網頁時出現錯誤的請求錯誤

Socket s = new Socket(InetAddress.getByName(req.hostname), 80); 
        PrintWriter socketOut = new PrintWriter(s.getOutputStream()); 
        socketOut.print("GET "+ req.url + "\n\n"); 
        socketOut.flush(); 
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 

        StringBuffer buffer = new StringBuffer(); 
        int data = in.read(); 
        while (data != -1) { 
         char theChar = (char) data; 
         buffer.append(theChar); 
         data = in.read(); 
        } 
        in.close(); 
        byte[] result = buffer.toString().getBytes(); 
        out.write(result); 

而結果包含HTML標記從壞請求消息開始,但我刪除它們,以便這裏是我的結果:

Thread with id 10 URL: http://www.facebook.com.tr/ 
Host: www.facebook.com.tr 
HTTP/1.1 400 Bad Request 
Content-Type: text/html 
Date: Wed, 17 Oct 2012 10:18:06 GMT 
Connection: close 
Content-Length: 134 

400 Bad Request 
Method Not Implemented 
Invalid method in request 

回答

0

我想像這是因爲你的代碼無法處理它接收的初始握手的永久重定向:

$>> curl --head www.facebook.com.tr/ 
HTTP/1.1 301 Moved Permanently 
Location: http://www.facebook.com/ 
Content-Type: text/html; charset=utf-8 
X-FB-Debug: WOU3E4EGqo5Rxch8AnUzqcWg9CcM1p55pt1P9Wrm0QI= 
Date: Wed, 17 Oct 2012 10:33:12 GMT 
Connection: keep-alive 
Content-Length: 0 

還要檢查你的問題,這是400你收到的不是404

試試這個:

BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("http://www.facebook.com.tr").openStream())); 

String line = reader.readLine(); 
while(line!=null) { 
    System.out.println(line); 
    line = reader.readLine(); 
} 
+0

所以問題不在於閱讀嗎? –

+0

Web地址不僅僅是一個文本文件,您正試圖與Web服務器通信,並需要執行某些握手才能獲取所需的信息。我會用一些應該做你想做的代碼更新我的答案。 – codeghost

0

錯誤代碼400發送HTTP服務,當您發送不正確的或不適當的請求到HTTP服務器。你必須確定你的要求是否正確。我看到www.facebook.com.tr。檢查那個.tr

0

服務器不能容忍HTTP請求而沒有HTTP-Version聲明。試着這樣說:

socketOut.print("GET "+ req.url + " HTTP/1.1\n\n"); 

也考慮到該服務器保持連接活着帳戶,因此在某些點上data = in.read()將鎖定主線程。除非您終止連接或執行其他操作,否則您的循環需要一段時間才能結束,直到連接超時。

相關問題