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

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;//返回数据
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值