2017-03-29 7 views
0

Java에서 StackExchange API에 대한 REST 요청을하려고하는데 출력을 읽는 데 문제가 있습니다. 내가 얻을, 내 자바 프로그램의 출력을 인쇄 할 때HttpURLConnection을 사용하여 REST 요청 출력 읽기

{"items":[{"tags":["c++","templates","covariant"],"owner":{"reputation":3,"user_id":7447292,"user_type":"registered","profile_image":"https://www.gravatar.com/avatar/8979f1b328b9b0f786dec8b4edd514bc?s=128&d=identicon&r=PG&f=1","display_name":"B.Oudot","link":"http://stackoverflow.com/users/7447292/b-oudot"} 

: 아래

package Utils; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class RestClient 
{ 


public static void main(String[] args) 
{ 
    try 
    { 
     URL url = new URL("https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     System.out.println(conn.getResponseCode()); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     String output; 

     while ((output = reader.readLine()) != null) 
     { 
      System.out.println(output); 
     } 

    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

} 

이 웹 사이트에서 샘플 출력입니다 : 내가 제대로 읽을 수 있는지 확인하기 위해 작은 코드 예제를 만들어 상태 코드 200 그리고 나머지는 아스키가 아닌 문자들입니다. 저는 REST와 JSON을 처음 접했습니다. 가능하다면 제 3 자 라이브러리를 사용하고 싶지 않습니다.

EDIT 내 프로그램의 출력물을 이미지로 넣었습니다.

Non Ascii Chatacters

+0

실제 HTTP 라이브러리를 사용하는 것이 더 쉬울 수도 있습니다. 아마도 그것은 gzipped거야? 출력 값의 예제를 제공하지 않으므로 말할 수 없습니다. –

+0

내 출력 사진을 추가하여 내 게시물을 편집했습니다. – Paul

답변

1

는 콘텐츠 인코딩 gzip을 사용하는 경우, GZIPInputStream API를 사용합니다. 그것은 또한 입력 스트림입니다.

gipinput 스트림을 응답에 사용 했으므로 출력이 json으로 표시됩니다.

public static void main(String[] args){ 
    try 
    { 
     URL url = new URL("https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     System.out.println(conn.getResponseCode()); 



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

     String readed; 
     while ((readed = in.readLine()) != null) { 
      System.out.println(readed); 
     } 
     //BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     String output; 

     while ((output = in.readLine()) != null) 
     { 
      System.out.println(output); 
     } 

    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    } 

나를 위해 일했습니다.

+0

gzip이라고 생각하지 않습니다. 브라우저에서이 링크 "https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow"를 열 수 있습니다. – Paul

+1

@Paul \t 브라우저에서 압축되지 않은 콘텐츠를 처리하는 것으로 나타났습니다. 그것은 웹이 일하는 방법을 관리합니다. 예를 들어 브라우저에서 질문의 링크를 열고 네트워크 요청을 보면'Content-Encoding : gzip'이 표시됩니다. 그래서. –

+0

정말 고마워요. 그것은 작동합니다. – Paul