您的位置:首页 > 理论基础 > 计算机网络

JAVA基础学习之Http(含JSON)网络编程

2015-10-17 19:25 627 查看
1.访问网络资源,下载网络资源

示例:

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 json 网络编程