HttpURLConnection和HttpClient获取Json数据
2013-11-17 16:31
495 查看
Android中提供的HttpURLConnection(JDK自带)和HttpClient(Apache提供)接口可以用来开发HTTP程序。
服务器端有如下json数据
1.首先来看HttpURLConnection的Get方法获取json数据:
2.HttpURLConnection的POST方法获取json数据:
3.使用HttpClient的get方法获取Json:
.4.使用HttpClient的post方法获取Json:
另外提一点:
Get方式提交不论是HttpURLConnection还是HttpClient,传递中文参数会产生乱码,(传递方法看上面代码)
虽然已经用URLEncoder.encode("中文参数","utf-8")转成utf-8格式,在servlet端也使用spring过滤中文乱码,
但是仍然要这样子接收,不然会中文乱码(不知为何):
Post方式接收中文参数则没有这个问题,直接:
服务器端有如下json数据
[ { "image": "http://222.22.254.223:8080/web/a.jpg", "title": "新闻标题1", "content": "新闻内容1", "conut": "跟帖人数1" }, { "image": "http://222.22.254.223:8080/web/b.jpg", "title": "新闻标题2", "content": "新闻内容2", "conut": "跟帖人数2" }, { "image": "http://222.22.254.223:8080/web/c.jpg", "title": "新闻标题3", "content": "新闻内容3", "conut": "跟帖人数3" }, { "image": "http://222.22.254.223:8080/web/d.jpg", "title": "新闻标题4", "content": "新闻内容4", "conut": "跟帖人数4" }, { "image": "http://222.22.254.223:8080/web/e.jpg", "title": "新闻标题5", "content": "新闻内容5", "conut": "跟帖人数5" } ]
1.首先来看HttpURLConnection的Get方法获取json数据:
public List<HeadNews> HttpURLConnection_GET()throws Exception{ List<HeadNews>list=new ArrayList<HeadNews>(); String path="http://222.22.254.223:8080/web/HeadNewsJson"; //参数直接加载url后面 path+="?username="+URLEncoder.encode("我是大帅哥HttpClientGET","utf-8"); URL url=new URL(path); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); if(conn.getResponseCode()==200){ //200表示请求成功 InputStream is=conn.getInputStream(); //以输入流的形式返回 //将输入流转换成字符串 ByteArrayOutputStream baos=new ByteArrayOutputStream(); byte [] buffer=new byte[1024]; int len=0; while((len=is.read(buffer))!=-1){ baos.write(buffer, 0, len); } String jsonString=baos.toString(); baos.close(); is.close(); //转换成json数据处理 JSONArray jsonArray=new JSONArray(jsonString); for(int i=0;i<jsonArray.length();i++){ //一个循环代表一个headnews对象 HeadNews headnews=new HeadNews(); JSONObject jsonObject = jsonArray.getJSONObject(i); headnews.setTitle(jsonObject.getString("title")); headnews.setContent(jsonObject.getString("content")); headnews.setConut(jsonObject.getString("conut")); headnews.setImage(jsonObject.getString("image")); list.add(headnews); } } return list; }
2.HttpURLConnection的POST方法获取json数据:
public List<HeadNews>HttpURLConnection_POST() throws Exception{ List<HeadNews>list=new ArrayList<HeadNews>(); String path="http://222.22.254.223:8080/web/HeadNewsJson"; URL url=new URL(path); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.setDoOutput(true); //允许向服务器输出数据 conn.setDoInput(true); //允许接收服务器数据 conn.setRequestMethod("POST"); conn.setUseCaches(false); // Post 请求不能使用缓存 conn.setConnectTimeout(5000); // 参数前面不能加?号 String urlParas="username="+URLEncoder.encode("admin", "UTF-8"); byte [] entity=urlParas.getBytes(); //设置请求参数 conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); //实体参数类型 conn.setRequestProperty("Content-Length", entity.length+""); //实体参数长度 // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成, // 要注意的是connection.getOutputStream会隐含的进行connect。 conn.connect(); //将要上传的参数写入流中 conn.getOutputStream().write(entity); if(conn.getResponseCode()==200){ InputStream is=conn.getInputStream(); //将输入流转换成字符串 ByteArrayOutputStream baos=new ByteArrayOutputStream(); byte [] buffer=new byte[1024]; int len=0; while((len=is.read(buffer))!=-1){ baos.write(buffer, 0, len); } String json=baos.toString(); baos.close(); is.close(); //json处理 JSONArray jsonArray=new JSONArray(json); for(int i=0;i<jsonArray.length();i++){ HeadNews headnews=new HeadNews(); JSONObject jsonObject = jsonArray.getJSONObject(i); headnews.setTitle(jsonObject.getString("title")); headnews.setContent(jsonObject.getString("content")); headnews.setConut(jsonObject.getString("conut")); headnews.setImage(jsonObject.getString("image")); list.add(headnews); } } return list; }
3.使用HttpClient的get方法获取Json:
public List<HeadNews>HttpClient_GET() throws Exception{ List<HeadNews>list=new LinkedList<HeadNews>(); String path="http://222.22.254.223:8080/web/HeadNewsJson"; //get方法设置参数要?号 StringBuilder sb=new StringBuilder(path); sb.append("?"); sb.append("username=").append(URLEncoder.encode("我是大帅哥HttpClientGET","utf-8")); //1.得到浏览器 HttpClient httpClient=new DefaultHttpClient();//浏览器 //2指定请求方式 HttpGet httpGet=new HttpGet(sb.toString()); //3.执行请求 HttpResponse httpResponse=httpClient.execute(httpGet); //4 判断请求是否成功 int status=httpResponse.getStatusLine().getStatusCode(); if(status==200){ //读取响应内容 String result=EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); //json处理 JSONArray jsonArray=new JSONArray(result); for(int i=0;i<jsonArray.length();i++){ HeadNews headnews=new HeadNews(); JSONObject jsonObject = jsonArray.getJSONObject(i); headnews.setTitle(jsonObject.getString("title")); headnews.setContent(jsonObject.getString("content")); headnews.setConut(jsonObject.getString("conut")); headnews.setImage(jsonObject.getString("image")); list.add(headnews); } } return list; }
.4.使用HttpClient的post方法获取Json:
public List<HeadNews>HttpClient_POST() throws Exception{ List<HeadNews>list=new ArrayList<HeadNews>(); String path="http://222.22.254.223:8080/web/HeadNewsJson"; //1.得到浏览器 HttpClient httpClient=new DefaultHttpClient(); //2指定请求方式 HttpPost httpPost=new HttpPost(path); //3.构建请求实体的数据 List<NameValuePair> paras=new ArrayList<NameValuePair>(); paras.add(new BasicNameValuePair("username", "我是帅哥httpclientPost")); //4.构建实体 UrlEncodedFormEntity entity=new UrlEncodedFormEntity(paras,"utf-8"); //5。。把实体放入请求对象 httpPost.setEntity(entity); //6.执行请求 HttpResponse httpResponse=httpClient.execute(httpPost); int status=httpResponse.getStatusLine().getStatusCode(); if(status==200){ //读取响应内容 String result=EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); // JSONArray jsonArray=new JSONArray(result); for(int i=0;i<jsonArray.length();i++){ HeadNews headnews=new HeadNews(); JSONObject jsonObject = jsonArray.getJSONObject(i); headnews.setTitle(jsonObject.getString("title")); headnews.setContent(jsonObject.getString("content")); headnews.setConut(jsonObject.getString("conut")); headnews.setImage(jsonObject.getString("image")); list.add(headnews); } } return list; }
另外提一点:
Get方式提交不论是HttpURLConnection还是HttpClient,传递中文参数会产生乱码,(传递方法看上面代码)
虽然已经用URLEncoder.encode("中文参数","utf-8")转成utf-8格式,在servlet端也使用spring过滤中文乱码,
但是仍然要这样子接收,不然会中文乱码(不知为何):
new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")
Post方式接收中文参数则没有这个问题,直接:
request.getParameter("username")
相关文章推荐
- HttpURLConnection和HttpClient获取Json数据
- HttpURLConnection和HttpClient获取Json数据
- Android HttpURLConnection数据获取并JSON解析
- 用HttpURLConnection,okhttp,httpclient传JSON数据
- HttpURLConnection和HttpClient分别以GET和POST获取Json数据
- HttpClient和HttpUrlConnection实现post发送和接收json数据
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
- HttpClient获取服务器JSON数据问题处理
- HttpUrlConnection获取网络json串
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
- 通过开源框架AsyncHttpClient获取Json数据
- android HttpClient获取json数据
- HttpClient与HttpURLConnection的提交数据
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- android通过httpClient请求获取JSON数据并且解析
- android通过httpClient请求获取JSON数据并且解析
- android通过httpClient请求获取JSON数据并且解析
- HttpURLConnection和okHttp两种获取网络数据的实现方法
- HttpURLConnection获取JSON处理