2015-01-25 3 views
0
나는 응답 읽으려고

(뿐만 아니라이 응답하지만를이 사이트에서이 많은) 여기 내 함수의 코드입니다 :응답 인코딩 HttpConnection에 GET HTML 텍스트

// HTTP POST request 
    private void sendFirstPost() throws Exception { 

     String url = "http://g1.botva.ru/login.php"; 
     URL obj = new URL(url); 
     HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

     con.setInstanceFollowRedirects(false); 

     //add reuqest header 
     con.setRequestMethod("POST"); 
     con.setRequestProperty("Accept", "*/*"); 
     con.setRequestProperty("Accept-Encoding", "gzip, deflate"); 
     //con.setRequestProperty("Content-Length", "86"); 
     con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     con.setRequestProperty("User-Agent", "runscope/0.1"); 

     String urlParameters = "do_cmd=login&remember=1&password=avmalyutin1234&server=1&email=avmalyutin%40mail.ru"; 

     // Send post request 
     con.setDoOutput(true); 
     DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

     int responseCode = con.getResponseCode(); 
     System.out.println("\nSending 'POST' request to URL : " + url); 
     System.out.println("Post parameters : " + urlParameters); 
     System.out.println("Response Code : " + responseCode); 
     System.out.println("Content Type : " + con.getContentType()); 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(con.getInputStream(), "cp1251")); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 

     //print result 
     System.out.println(response.toString()); 

     byte [] array = response.toString().getBytes("cp1251"); 

     String buffff = new String(array); 
     System.out.println(buffff); 
    } 

콘텐츠 유형 I로는 text/html을 받으십시오. charset = cp1251. 나는 cp1251, windows-1251 인코딩을 사용하려고합니다. 좋은 결과는 없습니다. 일단 HTML 텍스트를 얻을 수 있었지만 이후에는 소스 코드를 변경하지 않고 이후에 실행해도 읽을 수없는 심볼 만 출력됩니다. 그렇다면 어떻게 HTML과 같은 텍스트를 적절히 응답 할 수 있습니까?

답변

0

헤더에 인코딩이 Cp1251이라고되어 ​​있지만 실제로는 그렇지 않습니다. 서버가 Cp1252에 해당하는 바이트를 전송 중입니다. 확인

한 가지 방법은 알고 있습니다 먼저 받게됩니다 어떤 바이트 :

String text = "Áîòâà Îíëàéí | Áèòâà çà ðåàëüíóþ êàïóñòó!"; 

for (byte n : text.getBytes("Cp1251")) { 
    System.out.printf("%d ", n); 
} 
System.out.println(); 

for (byte n : text.getBytes("Cp1252")) { 
    System.out.printf("%d ", n); 
} 
System.out.println(); 

그런 다음 당신이받는 바이트 사이에서 그들을 찾아 :

for(int n; (n = inputStream.read()) > 0;) { 
    System.out.printf("%d ", (byte) n); 
}