2013-07-11 6 views
3

Existe-t-il une meilleure pratique pour l'envoi de requêtes HTTP GET que les suivantes?Meilleure pratique d'envoi de requêtes HTTP GET

private StringBuffer getData(String url) throws Exception 
{ 
     URL obj; 

     obj = new URL(url); 
     HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
     con.setRequestMethod("GET"); 
     int responseCode = con.getResponseCode(); 

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

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

peut-être Webclient.DownloadString? – VladL

Répondre

4

Je pense que les deux changements simples que vous devez faire est de fermer votre flux d'entrée dans un bloc finally, et utiliser un StringBuilder au lieu de StringBuffer.

En outre, vous souhaiterez peut-être vérifier le code de réponse et déclencher une exception si vous recevez une réponse d'erreur (400+, 500+, etc.).

Edit:

Si vous avez décidé de mettre en mémoire tampon tout le contenu de toute façon, et ne vous dérange pas l'utilisation de bibliothèques, vous pouvez simplement faire:

Request.Get("http://some.url").execute().returnContent(); 

En utilisant Apache HttpComponents.

+0

très cool! oui, les composants apache sont ce que je cherchais à propos d'une comparaison en pratique. Merci de clarifier! – JaJ

4
String uri = "your url"; 
    HttpParams httpParams = new BasicHttpParams(); 
    HttpClient client = new DefaultHttpClient(httpParams); 
    HttpGet request = new HttpGet(uri); 
    HttpResponse response = client.execute(request); 
    String responseStr = buildResponseFromEntity(response.getEntity()); 

    private String buildResponseFromEntity(HttpEntity entity) 
       throws IllegalStateException, IOException { 

      BufferedReader r = new BufferedReader(new InputStreamReader(
        entity.getContent())); 
      StringBuilder total = new StringBuilder(); 
      String line; 
      while ((line = r.readLine()) != null) { 
       total.append(line); 
      } 
      return total.toString(); 
      } 
    // check if error 
if (response.getStatusLine().getStatusCode() != 200) { 
      JSONObject jsonObj = null; 
      try { 
       jsonObj = new JSONObject(responseStr); 
      } catch (Exception e) { 
       // do your code 
      } 
} 
+0

génial merci! – JaJ

+1

Vous pouvez mentionner que cela utilise Apache HttpComponents pour plus de clarté. De plus, je crois qu'il est toujours préférable d'utiliser un bloc finally et d'appeler 'httpGet.releaseConnection()' pour libérer la connexion sous-jacente. Ce travail peut également être sauvegardé si le contenu est tamponné de toute façon en utilisant 'Request.Get (" http: //some.url ") .execute(). ReturnContent();' –

Questions connexes