2017-10-18 25 views
1

Bonjour J'essaye de mettre en place un client oauth d'autorisation basé sur Java et la bibliothèque Apache Oltu pour l'échange de pile api.Echange de pile réponse oauth illisible

La réponse que j'ai reçue ressemble à ceci quand elle est imprimée en console u n 0 "+ tU l * k l ۄ {BԨM s Inh W # ڇ Wj @ ٹ F * P N р = ѹ \ k

Dans le navigateur, la réponse est gaie imprimée au format READABLE Mon problème est exactement semblable à Http request to stackexchange api returns unreadable json mais comme la réponse acceptée suggère le flux de réponse est JSON gziped Quand j'essaie de décompresser la réponse mon programme dit "pas au format GZIP format" J'ai essayé de suivre: nouveau GZIPInputStream (réponse)

Si je convertir la réponse à i ensorceler obtenir les éléments suivants:

0x1FEFBFBD080000000000040075EFBFBDEFBFBD6EEFBFBD3010EFBFBD5FEFBFBDEFBFBD222B140CEFBFBDEFBFBDEFBFBD7455EFBFBDEFBFBD6CEFBFBDEFBFBD2A6BEFBFBD07EFBFBD156C13DB84EFBFBDEFBFBD7B0742D4A84DEFBFBDEFBFBDEFBFBDEFBFBD73EFBFBD68EFBFBD57EFBFBD23EFBFBDEFBFBDDA8757EFBFBD086A40D9B9EFBFBD462A50EFBFBDEFBFBDEFBFBDEFBFBDEFBFBD1216EFBFBDEFBFBDEFBFBDEFBFBDEFBFBD3C61EFBFBD1B1505D78441EFBFBDDF95EFBFBDEFBFBDCE8B2627EFBFBDEFBFBD4433EFBFBD6E45EFBFBDEFBFBD610CEFBFBDEFBFBD1142EFBFBDEFBFBD29EFBFBD6B545241EFBFBD44455EEFBFBD4DEFBFBD45797052EFBFBD10EFBFBD69C99B42E49C8BEFBFBD79EFBFBDEFBFBD08513B2BEFBFBD0B58EFBFBDEFBFBD22EFBFBDEFBFBDEFBFBD33EFBFBD3CEFBFBDEFBFBDEFBFBDEFBFBDEFBFBDEFBFBD71365EEFBFBD600BEFBFBDEFBFBD1748EFBFBDEFBFBD0F616DEFBFBDEFBFBDEFBFBDEFBFBDDBB5EFBFBD7321442EEFBFBD66EFBFBD3C0 7EFBFBD32EFBFBD13EFBFBDEFBFBD6BD0813CEFBFBD6207EFBFBD1756EFBFBDCDA9EFBFBDEFBFBD2DEFBFBD14EFBFBDEFBFBD35EFBFBD6D1BEFBFBD3B66EFBFBD1FEFBFBDEFBFBDEFBFBDEFBFBD1D7A0376EFBFBDEFBFBD515BEFBFBDEFBFBD2E314EEFBFBD4DEFBFBD10EFBFBD7B72EFBFBD30EFBFBDEFBFBDEFBFBDCE9974EFBFBD0FE9A1BD67474CCD9377EFBFBD1E516A03037E5059EFBFBDEFBFBD76EFBFBDEFBFBD0211EFBFBD2EEFBFBD16EFBFBD45EFBFBDEFBFBDEFBFBDEFBFBD2EEFBFBD38EFBFBD42EFBFBD05EFBFBD725E6156EFBFBDE9B1A8EFBFBDEFBFBD7B38677973EFBFBDEFBFBD5AEFBFBDEFBFBDEFBFBD73EFBFBDC69FEFBFBDEFBFBD68EFBFBDEFBFBD611A61EFBFBD16EFBFBD36E8A38DEFBFBDCF845D20EFBFBD4BEFBFBDEFBFBDEFBFBDEFBFBD797611EFBFBDEFBFBD5FEFBFBD164EEFBFBDEFBFBDD180EFBFBDEFBFBD0EEFBFBD3DD1B9EFBFBD015C1A6BEFBFBDEFBFBD020000

Donc, ma question est maintenant que je ne peux pas lire directement le JSON et ne peut pas décompresser avec gzip. Que puis-je faire maintenant pour traiter les données? Des idées ? Merci pour votre temps.

Répondre

0

Vous pouvez essayer OkHttp. Voici un exemple qui fonctionne pour moi. Il résout automatiquement ce problème de décompression pour moi.

UriComponents uriComponents = 
      UriComponentsBuilder.newInstance() 
        .scheme("https") 
        .host("api.stackexchange.com") 
        .path("/2.2/users") 
        .queryParam("order", "desc") 
        .queryParam("sort", "reputation") 
        .queryParam("inname", fullName) 
        .queryParam("site", "stackoverflow") 
        .build() 
        .encode(); 

    OkHttpClient client = new OkHttpClient(); 

    Request request = new Request.Builder() 
      .url(uriComponents.toUriString()) 
      .get() 
      .addHeader("cache-control", "no-cache") 
      .build(); 

    Response response = client.newCall(request).execute(); 
    return new JSONObject(response.body().string()); 

Maven dépendance

<dependency> 
     <groupId>com.squareup.okhttp</groupId> 
     <artifactId>okhttp</artifactId> 
     <version>2.7.5</version> 
    </dependency> 
+1

Remerciez toi. Je vais essayer ça. A partir de maintenant, j'ai écrit un appel http directe comme ceci – Haramoz

+1

J'ai remarqué que vous n'avez pas à brancher votre clé ur dans le cadre de la requête http url. Pour moi, j'ai l'air d'en avoir besoin. Est-ce faux? A partir de maintenant, j'ai écrit un appel HTTP direct comme celui-ci. Oh a dû ajouter le code comme réponse. Impossible d'ajouter comme commentaire. trop long. – Haramoz

+0

Cela dépend du point de terminaison que vous utilisez. Vous pouvez voir certains points de terminaison besoin de cette clé dans le lien suivant: https://api.stackexchange.com/docs –

1

A partir de maintenant je l'ai écrit un appel http directement comme ceci // requête HTTP GET private String sendGet (String accessToken) throws Exception {

String url = "https://api.stackexchange.com/2.2/me?site=stackoverflow&key="key"((&access_token="; 
    url = url + accessToken; 
    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    con.setRequestMethod("GET");  
    int responseCode = con.getResponseCode(); 
    if(responseCode == 200){ 
     System.out.println("\nSending 'GET' request to URL : " + url); 
     System.out.println("Response Code : " + responseCode); 
     //System.out.println(con.getContentEncoding()); 
     //System.out.println(con.getContentType()); 

     GZIPInputStream gp = new GZIPInputStream(con.getInputStream()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(gp)); 

     StringBuffer response = new StringBuffer(); 
     String line; 
     while ((line = br.readLine()) != null) { 
      response.append(line); 
     } 

     br.close(); 

     System.out.println(response.toString()); 
     return response.toString(); 
    } 
    else{ 
     return null; 
    }