2013-04-16 2 views
0

Я пытаюсь использовать httpClient (по apache) для публикации и получения данных. Проводка абсолютно прекрасна, и мой код для этого не имеет проблем, однако я не могу сказать то же самое для получения данных.Извлечение тела сообщения из ответа HTTP

Сайта Я пытаюсь получить данные из такой: http://www.posttestserver.com/data/2013/04/16/01.13.04594755373

Я только хочу, чтобы получить тело поста (то есть строка JSON в нижней части, начиная с недавними случаями), однако, метод I В настоящее время я использую (и каждый метод, который я нахожу в Интернете) возвращает время, источник IP, заголовки и тело (в основном это возвращает все). Есть ли все равно, чтобы разобрать тело из этого? Я не хочу проходить через возвращаемую строку и говорить ей, чтобы искать текст «Начать тело сообщения», я хочу естественный метод для этого. Это существует?

TLDR: Я только хочу, чтобы вернуть то, что в почтовом теле

Вот мой код:

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)); 

} 

И вот что возвращается:

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 == 

Любые идеи?

ответ

0

Вы можете отправить следующий метод url, и он даст вам ответ в String без каких-либо подробностей заголовка, поэтому в вашем примере просто 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

Спасибо за быстрый ответ, но ваш метод производит тот же самый результат, что и мой (ваш buffer.toString() производит то же самое, что и мой EntityUtils.toString (сущность)). = S. Любой другой совет? –

+0

Ах, я вижу, что это ответ от URL-адреса, который появляется в браузере, так что это не настоящий заголовок, это целая страница! Этот ответ недействителен JSON. Если у них нет спокойного URL-адреса, вы разбираете, который просто создает JSON, вы можете быть ввернуты и должны будете String проанализировать его (что ужасно). – david99world

+0

Я поменял загрузку на JSON и получил ту же ошибку, что означает, что синтаксический анализ строк будет вероятным. Тьфу. На самом деле надеялся, что будет более элегантное решение. Спасибо в любом случае d99w. –

Смежные вопросы