2013-04-16 7 views
0

J'essaie d'utiliser httpClient (par apache) pour publier et obtenir des données. La publication est tout à fait correcte et mon code pour cela n'a aucun problème, cependant, je ne peux pas dire la même chose pour obtenir des données.Extraction du corps du message à partir d'une réponse HTTP

Le site que je suis en train d'obtenir des données de est la suivante: http://www.posttestserver.com/data/2013/04/16/01.13.04594755373

Je veux seulement recevoir le corps du poste (la chaîne JSON en bas en commençant par les cas récents), cependant, la méthode que je J'utilise actuellement (et chaque méthode que je trouve en ligne) renvoie l'heure, l'adresse IP source, les en-têtes et le corps (en gros, il renvoie tout). Y a-t-il un moyen d'analyser le corps de tout cela? Je ne veux pas passer par la chaîne retournée et lui dire de chercher le texte "Begin Post Body", je veux une méthode naturelle pour le faire. Est-ce que ça existe?

TLDR: Je veux seulement qu'il revienne ce qui est dans le corps post

Voici mon code:

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 

public static void main(String[] args) throws ClientProtocolException, IOException{ 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpGet httpget = new HttpGet("http://www.posttestserver.com/data/2013/04/16/01.41.38521171013"); 
    HttpResponse response = httpclient.execute(httpget); 
    HttpEntity entity = response.getEntity(); 
    System.out.println(EntityUtils.toString(entity)); 

} 

Et voici ce qui est retourné:

Time: Tue, 16 Apr 13 01:41:38 -0700 
Source ip: 155.198.108.247 

Headers (Some may be inserted by server) 
UNIQUE_ID = UW0OwtBx6hIAACfjfl4AAAAA 
CONTENT_LENGTH = 7627 
CONTENT_TYPE = application/json 
HTTP_HOST = posttestserver.com 
HTTP_CONNECTION = close 
HTTP_USER_AGENT = Apache-HttpClient/4.2.4 (java 1.5) 
REMOTE_ADDR = 155.198.108.247 
REMOTE_PORT = 54779 
GATEWAY_INTERFACE = CGI/1.1 
REQUEST_METHOD = POST 
QUERY_STRING = 
REQUEST_URI = /post.php 
REQUEST_TIME = 1366101698 

No Post Params. 

== Begin post body == 
{"Recent Cases":[{"descript..etc etc"}]} 
== End post body == 

Toutes les idées?

Répondre

0

Vous pouvez envoyer une url à la méthode suivante et elle vous donnera la réponse dans une chaîne sans aucun détail d'en-tête, donc dans votre exemple, juste le json.

private static String readUrl(final String urlString) throws Exception { 
     BufferedReader reader = null; 
     try { 
      final URL url = new URL(urlString); 
      reader = new BufferedReader(new InputStreamReader(url.openStream())); 
      final StringBuffer buffer = new StringBuffer(); 
      int read; 
      final char[] chars = new char[1024]; 
      while ((read = reader.read(chars)) != -1) { 
       buffer.append(chars, 0, read); 
      } 
      return buffer.toString(); 
     } finally { 
      if (reader != null) { 
       reader.close(); 
      } 
     } 
    } 
+0

Merci pour la réponse rapide, mais votre méthode produit exactement la même sortie que la mienne (votre buffer.toString() produit la même chose que mon EntityUtils.toString (entity)). = S. Un autre conseil? –

+0

Ah, je vois que c'est la réponse de l'URL qui apparaît dans un navigateur aussi donc ce n'est pas l'en-tête réel c'est toute la page! Cette réponse est invalide JSON. Si elles n'ont pas une URL reposante vous une analyse qui produit juste le JSON vous pourriez être foutu et devra l'analyser (ce qui est horrible). – david99world

+0

J'ai changé le téléchargement en JSON et j'ai la même erreur, ce qui signifie que l'analyse de chaîne est probable. Pouah. Vraiment, j'espérais qu'il y aurait une solution plus élégante. Merci quand même d99w. –

Questions connexes