zoukankan      html  css  js  c++  java
  • HttpURLConnection和HttpClient获取Json数据

     Android中提供的HttpURLConnection(JDK自带)和HttpClient(Apache提供)接口可以用来开发HTTP程序。

    服务器端有如下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")




  • 相关阅读:
    Linux 下建立 Git 与 GitHub 的连接
    PHP Redis 对象方法手册
    wampServer 安装 Redis 扩展
    CentOS 与 Ubuntu 使用命令搭建 LAMP 环境
    Xshell 连接 CentOS 7 与 Ubuntu Server
    使用那各VUE的打印功能(print.js)出现多打印一个空白页的问题
    MySql数据库,查询数据导出时会出现重复的记录(数据越多越明显)
    解决 nginx 启动错误 nginx: [emerg] host not found in upstream
    关于nginx配置的一个报错connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory)
    网站的ssl证书即将过期,需要续费证书并更新
  • 原文地址:https://www.cnblogs.com/fzll/p/3954617.html
Copyright © 2011-2022 走看看