2017-08-02 21 views
0

JavaのGETメソッドを使用した単純なHTTPリクエストを使用して、stackoverflow APIからユーザー情報を取得しようとしています。HTTPリクエストから正しいデータを取得する方法

私は問題なくGETメソッドを使用して、別のHTTPデータを取得する前に使用していたこのコード:

URL obj; 
    StringBuffer response = new StringBuffer(); 
    String url = "http://api.stackexchange.com/2.2/users?inname=HCarrasko&site=stackoverflow"; 
     try { 
     obj = new URL(url); 
     HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
     con.setRequestMethod("GET"); 
     int responseCode = con.getResponseCode(); 
     System.out.println("\nSending 'GET' request to URL : " + url); 
     System.out.println("Response Code : " + responseCode); 
     BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     String inputLine; 

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

     in.close(); 
     System.out.println(response.toString()); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

しかし、私はこのように、response VARを印刷するとき、この場合、私は見知らぬ人のシンボルを取得しています:

�mRM��0�+�N!���FZq�\�pD�z�:V���JX���M��̛yO^���뾽�g�5J&� �9�YW�%c`do���Y'��nKC38<A�&It�3��6a�,�,]���`/{�D����>6�Ɠ��{��7tF ��E��/����K���#_&�yI�a�v��uw}/�g�5����TkBTķ���U݊c���Q�y$���$�=ۈ��ñ���8f�<*�Amw�W�ـŻ��X$�>'*QN�?�<v�ݠ FH*��Ҏ5����ؔA�z��R��vK���"���@�1��ƭ5��0��R���z�ϗ/�������^?r��&�f��-�OO7���������Gy�B���Rxu�#:0�xͺ}�\����� 

ありがとうございます。

答えて

3

コンテンツは、おそらくGZIPエンコード/圧縮されています。これは、以下の輸入に頼っている

// Read in the response 
// Set up an initial input stream: 
InputStream inputStream = fetchAddr.getInputStream(); // fetchAddr is the HttpURLConnection 

// Check if inputStream is GZipped 
if("gzip".equalsIgnoreCase(fetchAddr.getContentEncoding())){ 
    // Format is GZIP 
    // Replace inputSteam with a GZIP wrapped stream 
    inputStream = new GZIPInputStream(inputStream); 
}else if("deflate".equalsIgnoreCase(fetchAddr.getContentEncoding())){ 
    inputStream = new InflaterInputStream(inputStream, new Inflater(true)); 
} // Else, we assume it to just be plain text 

BufferedReader sr = new BufferedReader(new InputStreamReader(inputStream)); 
String inputLine; 
StringBuilder response = new StringBuilder(); 
// ... and from here forward just read the response... 

:以下は、私はこの正確な問題に対処することを目的とHTTPを利用私のJavaベースのクライアントアプリケーションの全てに使用し、一般的なスニペットですjava.util.zip.GZIPInputStreamjava.util.zip.Inflater;およびjava.util.zip.InflaterInputStream

+0

これは間違いありません。 – jorrin

+0

これは正しい方法です:) – HCarrasko

関連する問題