安卓开发之网络请求HttpURLConnection

一、相关API

  1. URL:包含请求地址的类

    • URL(path):包含请求地址的构造方法
    • openConnection():得到与服务器连接的对象
  2. HttpURLConnection:代表与服务器连接的类

    • 准备工作:

      • setRequestMethod(“GET”) / setRequestMethod(“POST”):设置请求方式,默认方式为”GET”
      • setConnectTimeout(time):设置连接超时时间,单位ms
      • setReadTimeout(time):设置读取服务器返回数据的时间,单位ms
        URL 连接是否可用于输入和/或输出(使用了连接的..流就设置..为true)
      • setDoOutput(boolean) // 默认为false
      • setDoInput(boolean) // 默认为true

      • //设置读取/下载的起始位置
        String sProperty =”bytes=”+ startP + “-“+endP;
        .setRequestProperty(“Range”,sProperty);

    • 开始连接服务器:

      • connect():开始连接服务器
    • 请求工作:

      • int getResponseCode():得到服务器返回的结果码
      • int getContentLength():得到服务器返回的数据长度(字节),常用于下载进度的显示。

      • getOutputStream():返回一个指向服务器端的数据输出流

      • getInputStream():返回一个从服务器返回的数据输入流
    • 断开连接:

      • disconnect():断开连接

二、使用HttpURLConnection提交GET请求

//在分线程进行网络请求
new Thread(){

    public void run(){

            //UTF-8
            String path = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm"+
            "?tel=00012345678";



            try {

                //创建URL对象
                URL url = new URL(path);

                //得到HttpURLConnection对象
                HttpURLConnection connection = (HttpURLConnection)url.openConnection();

                //连接准备
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(6000);

                //开始连接服务器
                connection.connect();


                //带数据来请求数据
                if(connection.getResponseCode() == 200){
                        //200:代表请求OK



                        InputStream is = connection.getInputStream();       
                        //将InputStream转化为String 
                        String result = HttpUtil.inputstream2String(is);
                        System.out.println(result);
                        //关闭输入流
                        is.close();

                        //获取到数据后在主线程更新UI runOnUiThread / handler

                    }

                    connection.disconnect();

            }catch(Exception e){

            }

        }

}.start();

三、使用HttpURLConnection提交POST请求

可以在其它api上测试POST请求。

//在分线程进行网络请求
new Thread(){

    public void run(){

            String path = "http://www.kd185.com/ems.php";



            try {

                //创建URL对象
                URL url = new URL(path);

                //得到HttpURLConnection对象
                HttpURLConnection connection = (HttpURLConnection)url.openConnection();

                //连接准备
                connection.setRequestMethod("POST");
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(6000);

                //设置连接是否可以用于输入/输出
                connection.setDoOutput(true);

                //开始连接服务器
                connection.connect();

                //发送请求的数据:连接后得到输出流
                OutputStream os = connection.getOutputStream();
                String data = "wen=5011363267500&btnSearch=EMS快递查询";
                //将请求数据的字符串转换为byte数组
                os.write(data.getBytes("utf-8"));

                //关闭输出流
                os.flush();
                os.close();

                //带数据来请求数据
                if(connection.getResponseCode() == 200){
                        //200:代表请求OK



                        InputStream is = connection.getInputStream();       
                        //将InputStream转化为String (在此不赘述)
                        String result = HttpUtil.inputstream2String(is);
                        System.out.println(result);
                        //关闭输入流
                        is.close();

                        //在主线程更新UI runOnUiThread / handler

                    }

                    connection.disconnect();

            }catch(Exception e){

            }

        }

}.start();

附 HttpUtil代码:

public class HttpUtil {

    public static String inputstream2String(InputStream is) throws Exception {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];

        int len = -1;
        while((len=is.read(buffer))!=-1){
            baos.write(buffer,0,len);
        }

        String result = baos.toString();

        return result;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值