JAVA基础学习之Http(含JSON)网络编程
2015-10-17 19:25
627 查看
1.访问网络资源,下载网络资源
示例:
2.使用HttpClient类
HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。就是对 URLConnection 进行了包装,更加好用了。
使用步骤:
1. 创建HttpClient对象。
2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建GetMethod对象;如果需要发送Post请求,创建PostMehtod对象。
3. 如果需要发送请求参数,可调用GetMethod、PostMehtod共同的 setQueryString方法来添加请求参数;
4. 调用HttpClient对象的executeMethod(GetMethod)发送请求,该方法返回一个状态码。
5. 调用 Mehtod getResponseBody得到 返回的数据
6. 释放连接。无论执行方法是否成功,都必须释放连接
需要jar包
分别有get和post方式请求
示例:
3.JSON数据解析
注意:要解析Json数据需要Json的.jar包:Jsonlib.jar
示例1:
构造简单的JSON数据
数据如下:
示例2:
构造和解析比较复杂的JSON对象
数据如下:
代码:
示例3:
获取网络的Json数据进行解析
示例:
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class Demon { /** * @param args */ public static void main(String[] args) { URL url; HttpURLConnection connection = null; int code = 0; try { url = new URL("http://b.zol-img.com.cn/desk/bizhi/image/6/1440x900/1439952540956.jpg");//资源地址 connection = (HttpURLConnection) url.openConnection();//打开连接 code = connection.getResponseCode();//返回的状态码 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } if(code == HttpURLConnection.HTTP_OK){//访问成功 InputStream in; try { in = connection.getInputStream();//得到资源对象 byte[] b = new byte[1024];//设置缓冲区及大小 int len = -1; //将图片保存到磁盘 OutputStream out = new FileOutputStream("风景.jpg"); while ((len = in.read(b)) != -1) { out.write(b, 0, len); } in.close(); out.close(); System.out.println("下载完成!"); } catch (IOException e) { e.printStackTrace(); } } } }
2.使用HttpClient类
HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。就是对 URLConnection 进行了包装,更加好用了。
使用步骤:
1. 创建HttpClient对象。
2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建GetMethod对象;如果需要发送Post请求,创建PostMehtod对象。
3. 如果需要发送请求参数,可调用GetMethod、PostMehtod共同的 setQueryString方法来添加请求参数;
4. 调用HttpClient对象的executeMethod(GetMethod)发送请求,该方法返回一个状态码。
5. 调用 Mehtod getResponseBody得到 返回的数据
6. 释放连接。无论执行方法是否成功,都必须释放连接
需要jar包
分别有get和post方式请求
示例:
import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; public class Demon { /** * @param args */ public static void main(String[] args) { HttpClient client = new HttpClient(); // PostMethod method = new PostMethod(); GetMethod method = new GetMethod("http://apis.juhe.cn/mobile/get?phone=18126389004&dtype=&key=1630d970c77131e74c250542b395da91"); // method.setPath("http://apis.juhe.cn/mobile/get"); // phone=18126389004&dtype=&key=1630d970c77131e74c250542b395da91 // NameValuePair[] nameValuePairs = new NameValuePair[3]; // nameValuePairs[0] = new NameValuePair("phone", "18126389004"); // nameValuePairs[1] = new NameValuePair("dtype","json"); // nameValuePairs[2] = new NameValuePair("key","1630d970c77131e74c250542b395da91"); // method.setRequestBody(nameValuePairs); int code; try { code = client.executeMethod(method); if (code == 200) { byte[] b = method.getResponseBody(); System.out.println(new String(b, "utf-8")); } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
3.JSON数据解析
注意:要解析Json数据需要Json的.jar包:Jsonlib.jar
示例1:
构造简单的JSON数据
数据如下:
{ "reason": "成功的返回", "result": { "code": "SZH" }, "error_code": 0 }
import net.sf.json.JSONObject; public class Demon1 { /** * @param args */ public static void main(String[] args) { //-------构造----->> JSONObject object = new JSONObject(); object.put("reason", "成功的返回"); JSONObject resultObject = new JSONObject(); resultObject.put("code", "SZH"); object.put("result", resultObject); System.out.println(object); System.out.println("\n-------------------\n"); //--------解析------------>> JSONObject jsonObject = new JSONObject().fromObject(object); String reason = (String) jsonObject.get("reason"); JSONObject resultObject2 = jsonObject.getJSONObject("result"); String code = (String) resultObject2.get("code"); System.out.println(reason); System.out.println(code); } }
示例2:
构造和解析比较复杂的JSON对象
数据如下:
{ "reason": "成功的返回", "result": [ { "orderid": "1436844167826", "status": "4", "msg": "出票成功", "checi": "6253", "from_station_name": "哈尔滨东", "from_station_code": "VBB", "to_station_name": "滨江", "to_station_code": "BJB", "passengers": [ { "piaotype": "1", "reason": 0, "passporttypeseidname": "二代身份证", "passporttypeseid": "1", "zwname": "硬座", "price": "1.0", "piaotypename": "成人票", "ticket_no": "XXXXXXXX", "passengersename": "XXX", "zwcode": "1", "passportseno": "XXXXXXXXXXXX", "passengerid": 1123, "cxin": "08车厢,001座" } ], "ordernumber": "XXXXXXXX", "train_date": "2015-07-18", "orderamount": "1.00", "submit_time": "2015-07-14 11:22:47", "deal_time": "2015-07-14 11:23:18", "pay_time": "2015-07-14 11:52:02", }, ], "error_code": 0 }
代码:
import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class Demon2 { /** * @param args */ public static void main(String[] args) { //解析Json数据 JSONObject object = new JSONObject().fromObject(get()); String reason = object.getString("reason"); System.out.println(reason); JSONArray array = object.getJSONArray("result"); for (int i = 0; i < array.size(); i++) { System.out.println("\t" + array.getJSONObject(i).get("orderid")); System.out.println("\t" + array.getJSONObject(i).get("status")); System.out.println("\t" + array.getJSONObject(i).get("msg")); System.out.println("\t" + array.getJSONObject(i).get("checi")); System.out.println("\t" + array.getJSONObject(i).get("from_station_name")); System.out.println("\t" + array.getJSONObject(i).get("from_station_code")); System.out.println("\t" + array.getJSONObject(i).get("to_station_name")); System.out.println("\t" + array.getJSONObject(i).get("to_station_code")); JSONArray arrayArray = array.getJSONObject(i).getJSONArray("passengers"); for (int j = 0; j < arrayArray.size(); j++) { System.out.println("\t\t" + arrayArray.getJSONObject(j).get("piaotype")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("reason")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("passporttypeseidname")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("passporttypeseid")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("zwname")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("price")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("piaotypename")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("ticket_no")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("passengersename")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("zwcode")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("passportseno")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("passengerid")); System.out.println("\t\t" + arrayArray.getJSONObject(j).get("cxin")); } System.out.println("\t" + array.getJSONObject(i).get("ordernumber")); System.out.println("\t" + array.getJSONObject(i).get("train_date")); System.out.println("\t" + array.getJSONObject(i).get("orderamount")); System.out.println("\t" + array.getJSONObject(i).get("submit_time")); System.out.println("\t" + array.getJSONObject(i).get("deal_time")); System.out.println("\t" + array.getJSONObject(i).get("pay_time")); String error_code = (String) object.getString("error_code"); System.out.println(error_code); } } /** * 构造Json数据 * @return */ public static String get(){ JSONObject object = new JSONObject(); object.put("reason", "成功的返回"); JSONArray jsonArray = new JSONArray(); JSONObject arrayObject = new JSONObject(); arrayObject.put("orderid", "1436844167826"); arrayObject.put("status", "4"); arrayObject.put("msg", "出票成功"); arrayObject.put("checi", "6253"); arrayObject.put("from_station_name", "哈尔滨东"); arrayObject.put("from_station_code", "VBB"); arrayObject.put("to_station_name", "滨江"); arrayObject.put("to_station_code", "BJB"); JSONArray arrayObjectArray = new JSONArray(); JSONObject arrayObjectArrayObject = new JSONObject(); arrayObjectArrayObject.put("piaotype", "1"); arrayObjectArrayObject.put("reason", 0); arrayObjectArrayObject.put("passporttypeseidname", "二代身份证"); arrayObjectArrayObject.put("passporttypeseid", "1"); arrayObjectArrayObject.put("zwname", "硬座"); arrayObjectArrayObject.put("price", "1.0"); arrayObjectArrayObject.put("piaotypename", "成人票"); arrayObjectArrayObject.put("ticket_no", "XXXXXXXX"); arrayObjectArrayObject.put("passengersename", "XXX"); arrayObjectArrayObject.put("zwcode", "1"); arrayObjectArrayObject.put("passportseno", "XXXXXXXXXXXXX"); arrayObjectArrayObject.put("passengerid", "123"); arrayObjectArrayObject.put("cxin", "08车厢,001座"); arrayObjectArray.add(arrayObjectArrayObject); arrayObject.put("passengers", arrayObjectArray); arrayObject.put("ordernumber", "XXXXXXXX"); arrayObject.put("train_date", "2015-07-18"); arrayObject.put("orderamount", "1.00"); arrayObject.put("submit_time", "2015-07-14 11:22:47"); arrayObject.put("deal_time", "2015-07-14 11:23:18"); arrayObject.put("pay_time", "2015-07-14 11:52:02"); jsonArray.add(arrayObject); object.put("result", jsonArray); object.put("error_code", 0); // System.out.println(object.toString()); return object.toString(); } }
示例3:
获取网络的Json数据进行解析
import java.io.IOException; import net.sf.json.JSONObject; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.util.HttpURLConnection; public class Demon { /** * @param args */ public static void main(String[] args) { JSONObject object = new JSONObject().fromObject(get());//get()封装的获取数据方法 String resultCode = (String) object.get("resultcode");//键是你已经知道的 System.out.println(resultCode); JSONObject resultObject = object.getJSONObject("result"); System.out.println(resultObject.get("province")); System.out.println(resultObject.get("city")); System.out.println(resultObject.get("areacode")); System.out.println(resultObject.get("zip")); System.out.println(resultObject.get("company")); System.out.println(resultObject.get("card")); } public static String get(){ HttpClient client = new HttpClient(); // 请求的uri,服务器返回的将是JSON数据(这不是一个随便的uri,服务器返回的东西你是知道的,或者说服务器上的数据是你写的) GetMethod method = new GetMethod("http://apis.juhe.cn/mobile/get?phone=18126380004&dtype=&key=1630d970c77131e74c250542b395da91"); int code; String data = ""; try { code = client.executeMethod(method);//执行请求 if (code == HttpURLConnection.HTTP_OK) {//如果成功 data = method.getResponseBodyAsString();//将数据转成String } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } method.releaseConnection();//释放连接 return data;//返回数据 } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统