2013-04-16 24 views
0

我试图使用httpClient(通过apache)发布和获取数据。发布是绝对正确的,我的代码没有问题,但是,我不能说相同的获取数据。从HTTP响应中提取帖子正文

网站,我想从数据是这样的:http://www.posttestserver.com/data/2013/04/16/01.13.04594755373

我只希望接收后的主体(即底部的JSON字符串开头的最近案例),然而,这种方法我我正在使用(以及我在网上找到的每种方法)都会返回时间,源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,它会给你一个没有任何头部细节的字符串的响应,所以在你的例子只是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。如果他们没有一个安宁的网址,那么你解析出的只是产生JSON,你可能会被搞砸,并且必须对String进行解析(这太可怕了)。 – david99world

+0

我将上传更改为JSON并具有相同的错误,这意味着可能会进行字符串解析。啊。真的希望有一个更优雅的解决方案。无论如何感谢d99w。 –