接口自动化第二篇---HttpURLConnection的使用

package com.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/*
*1.get   http://v.juhe.cn/weather/index?format=2&cityname=深圳&key=9679a0703822fe67b9cff961ba197b02
* post body体中的三种样式
*2.post  http://v.juhe.cn/weather/index   x-www-form-urlencoded  format=2&cityname=深圳&key=9679a0703822fe67b9cff961ba197b02
*3.post  http://v.juhe.cn/weather/index   application/json   {"format":"2","cityname":"深圳","key"="9679a0703822fe67b9cff961ba197b02"}
*4.post  http://v.juhe.cn/weather/index   text/plain   this is test
 * 3和4情况类似
**/
public class InterfaceTest {

    //“GET”请求方式
    public static  void get(String url){
        HttpURLConnection conn=null;
        InputStream in=null;
        try {
            //创建连接实例
            conn= (HttpURLConnection) new URL(url).openConnection();
            //设置请求方法
            conn.setRequestMethod("GET");
             设置是否向httpUrlConnection输出,因为这个是get请求,因此需要设为false, 默认情况下是false;
            conn.setDoOutput(false);
            //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置false。默认值为 true。
            conn.setDoInput(true);
            //设置链接超时时间,单位为毫秒
            conn.setConnectTimeout(20000);
            //是否设置缓存
            conn.setUseCaches(false);
            conn.connect();
            //得到服务器返回的流数据
            in=conn.getInputStream();
            //创建一个byte数组
            byte[] b=new byte[1024];
            int index;
            //创建一个StringBuffer来进行字符串的拼接
            StringBuffer sb=new StringBuffer();
            //当有数据进来的时候怎么处理
            while((index=in.read(b))!=-1){
                sb.append(new String(b,0,index));
            }
            //得到最终的字符串结果
            String response=sb.toString();
            System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
                try {
                    //得到拼接后的字符串之后与服务器断开连接,放在finally是为了保证每次连接服务器得到我们想要的数据后,都会与服务器断开连接,从而减轻服务器的负载压力
                    if(conn!=null){
                        conn.disconnect();
                    }
                    //关闭流
                    if(in!=null){
                        in.close();
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
    }
    //“POST”请求方式
    public static  void post(String url, String body){
        HttpURLConnection conn=null;
        InputStream in=null;
        OutputStream out=null;
        try {
            //创建连接实例
            conn= (HttpURLConnection) new URL(url).openConnection();
            //设置请求方法
            conn.setRequestMethod("POST");
             设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
             http正文内,因此需要设为true, 默认情况下是false;
            conn.setDoOutput(true);
            //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置false。默认值为 true。
            conn.setDoInput(true);
            //设置链接超时时间,单位为毫秒
            conn.setConnectTimeout(20000);
            conn.setReadTimeout(20000);
            //是否设置缓存
            conn.setUseCaches(false);
            // 设定传送的内容类型是可序列化的java对象
            //(如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
            conn.setRequestProperty("Content-type","x-www-form-urlencoded;Charset=utf-8");
            conn.connect();
            out=conn.getOutputStream();
            //将post请求中放入form表单中的参数转化为byte数组的形式
            out.write(body.getBytes());
//            比如,在农村,几乎每家都有抽水机,抽水机的作用是什么呢,就是把水井里的水抽到水缸中,这时我们就会用水管连接抽水机和水缸(水管就好比是缓冲区)
//            ,当我们想把水井中的水都抽到水缸中时,我们就让抽水机工作抽水,如果我们发现水井里的水刚好抽完时,我们就会关掉抽水机的开关停止抽水,
//            那么这时,管道里就会遗留一部分水,抽水就是读数据,水缸进水就是写数据,水管充当缓存区的角色,不知道这样是不是具象化了呢
//            那么这样一来我们如果中途调用close()方法,输出区也还是有数据的,就像水缸里有水,只是在缓冲区遗留了一部分,
//            这时如果我们先调用flush()方法,就会强制把数据输出,缓存区就清空了,最后再关闭读写流调用close()就完成了。
            //清除缓存区,防止数据遗漏
            out.flush();
            //得到服务器返回的流数据
            in=conn.getInputStream();
            //创建一个byte数组
            byte[] b=new byte[1024];
            int index;
            //创建一个StringBuffer来进行字符串的拼接
            StringBuffer sb=new StringBuffer();
            //当有数据进来的时候怎么处理
            while((index=in.read(b))!=-1){
                sb.append(new String(b,0,index));
            }
            //得到最终的字符串结果
            String response=sb.toString();
            System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //得到拼接后的字符串之后与服务器断开连接,放在finally是为了保证每次连接服务器得到我们想要的数据后,都会与服务器断开连接,从而减轻服务器的负载压力
                if(conn!=null){
                    conn.disconnect();
                }
                //关闭流
                if(in!=null){
                    in.close();
                }
                //关闭流
                if(out!=null){
                    out.close();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    //“POST”请求方式
    public static  void post(String url, Map<String,String> params){
        HttpURLConnection conn=null;
        InputStream in=null;
        OutputStream out=null;
        StringBuffer outParams=new StringBuffer();
        for(String key:params.keySet()){
            if(outParams.length()!=0){
                outParams.append("&");
            }
            outParams.append(key).append("=").append(params.get(key));
        }
        try {
            //创建连接实例
            conn= (HttpURLConnection) new URL(url).openConnection();
            //设置请求方法
            conn.setRequestMethod("POST");
             设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
             http正文内,因此需要设为true, 默认情况下是false;
            conn.setDoOutput(true);
            //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置false。默认值为 true。
            conn.setDoInput(true);
            //设置链接超时时间,单位为毫秒
            conn.setConnectTimeout(20000);
            conn.setReadTimeout(20000);
            //是否设置缓存
            conn.setUseCaches(false);
            // 设定传送的内容类型是可序列化的java对象
            // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
//            conn.setRequestProperty("Content-type","application/json;Charset=utf-8");
            conn.connect();
            out=conn.getOutputStream();
            //将post请求中放入form表单中的参数转化为byte数组的形式
            out.write(outParams.toString().getBytes());
//            比如,在农村,几乎每家都有抽水机,抽水机的作用是什么呢,就是把水井里的水抽到水缸中,这时我们就会用水管连接抽水机和水缸(水管就好比是缓冲区)
//            ,当我们想把水井中的水都抽到水缸中时,我们就让抽水机工作抽水,如果我们发现水井里的水刚好抽完时,我们就会关掉抽水机的开关停止抽水,
//            那么这时,管道里就会遗留一部分水,抽水就是读数据,水缸进水就是写数据,水管充当缓存区的角色,不知道这样是不是具象化了呢
//            那么这样一来我们如果中途调用close()方法,输出区也还是有数据的,就像水缸里有水,只是在缓冲区遗留了一部分,
//            这时如果我们先调用flush()方法,就会强制把数据输出,缓存区就清空了,最后再关闭读写流调用close()就完成了。
            //清除缓存区,防止数据遗漏
            out.flush();
            //得到服务器返回的流数据
            in=conn.getInputStream();
            //创建一个byte数组
            byte[] b=new byte[1024];
            int index;
            //创建一个StringBuffer来进行字符串的拼接
            StringBuffer sb=new StringBuffer();
            //当有数据进来的时候怎么处理
            while((index=in.read(b))!=-1){
                sb.append(new String(b,0,index));
            }
            //得到最终的字符串结果
            String response=sb.toString();
            System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //得到拼接后的字符串之后与服务器断开连接,放在finally是为了保证每次连接服务器得到我们想要的数据后,都会与服务器断开连接,从而减轻服务器的负载压力
                if(conn!=null){
                    conn.disconnect();
                }
                //关闭流
                if(in!=null){
                    in.close();
                }
                //关闭流
                if(out!=null){
                    out.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String []args){
        //get("http://apis.juhe.cn/mobile/get?phone=13031155057&key=8ca9591f9776b021fa2b9a26bd9dee97");
        Map<String,String> map=new HashMap<String, String>();
        map.put("key","24f59d857d2ad45011946fede9ae5d55");
//        post("http://v.juhe.cn/wepiao/query",map);
        post("http://v.juhe.cn/wepiao/query","{\"key\":\"24f59d857d2ad45011946fede9ae5d55\"}");
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值