2016-12-27 12 views
0

Я использую HttpURLConnection для сканера https://translate.google.com/.HttpURLConnection с https InputStream Garbled

 InetSocketAddress addr = new InetSocketAddress("127.0.0.1", 1082); 
     Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); 
     url = new URL("https://translate.google.com/"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); 
     conn.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch"); 
     conn.setRequestProperty("Connection", "keep-alive"); 
     conn.setRequestProperty("User-Agent", 
       "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36"); 
     conn.setRequestProperty("Accept", "*/*"); 

     Map<String, List<String>> reqHeaders = conn.getHeaderFields(); 
     List<String> reqTypes = reqHeaders.get("Content-Type"); 
     for (String ss : reqTypes) { 
      System.out.println(ss); 
     } 

     InputStream in = conn.getInputStream(); 
     String s = IOUtils.toString(in, "UTF-8"); 
     System.out.println(s.substring(0, 100)); 

     Map<String, List<String>> resHeader = conn.getHeaderFields(); 
     List<String> resTypes = resHeader.get("Content-Type"); 
     for (String ss : resTypes) { 
      System.out.println(ss); 
     } 

Консоль

enter image description here

Но когда я изменить URL в http://translate.google.com/. Хорошо работает.

Я знаю, что на самом деле HttpURLConnection является HttpsURLConnection, когда я искатель https://translate.google.com/. Я пытаюсь использовать HttpsURLConnection, и он все еще искажен.

Любые предложения?

ответ

2

conn.setRequestProperty («Accept-Encoding», «gzip, deflate, sdch»);

Ответ сжимается, поскольку указанная выше строка сообщает серверу, что клиент способен понимать кодировки, указанные в Accept-Encoding.

Попробуйте прокомментировать эту строку или обратиться в эту ситуацию.

Там есть более конкретная реализация для HTTPS т.е. HttpsURLConnection, в случае, если вы заинтересованы в HTTPS-специфические особенности, например .:

import javax.net.ssl.HttpsURLConnection; 

.... 

URL url = new URL("https://www.google.com/"); 
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
+0

Я попытаюсь использовать кодировку Accept-Encoding. –

+0

@TomGrylls Try * удален * это. В настоящее время вы лжете службе, которую вы можете обрабатывать кодировкой gzip, когда вы не можете. Или нет. – EJP

+0

Я пробую свой код без Accept-Encoding.It возвращает нормальное значение, хотя и не правильное значение. И я обработаю это. Благодаря! –

0

Я принимаю answer.Solves Джерри Чина мою проблему. Мой ответ, просто запись, как я разрешаю эту проблему. Если этот подход необоснован. Дайте мне знать, я удалю этот ответ.

conn.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch"); 

И затем я проверяю ответ Content-Encoding.It's gzip.

Так что я использую GZIPInputStream для получения.

InputStream in = conn.getInputStream(); 
GZIPInputStream gzis=new GZIPInputStream(in); 
InputStreamReader reader = new InputStreamReader(gzis); 
BufferedReader br = new BufferedReader(reader); 

InputStream - это нормально.

BTW, Если вам не требуется Accept-Encoding, вы можете удалить его.

И не забывайте проверить пользовательский агент. Это очень важные и разные операционные системы, соответствующие различным пользовательским агентам.