HttpUrlConnection的doGet和doPost方法

package com.study;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;


/**
 * @Author: Ein
 * @DateTime: 2020/6/7 23:14
 * @Description: HttpUrlConnection的doGet和doPost方法
 */
class MyHttpUrlConnection {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }



    /**
     * HttpURLConnection使用Post请求方式
     * @param url     请求目标地址
     * @param parameter     请求参数,默认Json格式字符串,传对象需要序列化
     * @return
     */
    public static String doPost(String url,String parameter){
        HttpURLConnection conn =  null;
        BufferedReader reader = null;       //字符输入流
        PrintWriter writer = null;          //字符输出流
        String content = null;
        StringBuffer sbf = new StringBuffer();
        try {
            URL u = new URL(url);   //创建URL对象
            conn = (HttpURLConnection)u.openConnection();
            //设置Post请求方式,默认为Get
            conn.setRequestMethod("POST");
            //设置服务器连接超时时间(milliseconds毫秒),超过该时间则报异常
            conn.setConnectTimeout(6000);
            //设置读取服务器资源时间,已经建立连接,并开始读取服务端资源。如果到了指定的时间,没有可能的数据被客户端读取,则报异常
            conn.setReadTimeout(5000);
            /**
             * Post请求由于需要往服务区传输大量的数据,请求参数是在http的body里,因此需要设置setDoOutput(true)
             * 而无论Get、Post总是要通过getInputStream()从服务端获得响应,所以setDoInput()默认是true
             * setDoOutput()默认是false,需要手动设置为true,完了就可以调用getOutputStream()方法从服务器端获得字节输出流
             * 总结,get请求的话这两个设置setDoInput和setDoOutput默认就行了,post请求需要setDoOutput(true),这个默认是false的
             */
            conn.setDoInput(true);
            conn.setDoOutput(true);
            //Post请求禁止使用缓存  默认为true
            conn.setUseCaches(false);
            //自动执行HTTP重定向  默认为true
            conn.setInstanceFollowRedirects(true);
            /**
             * Accept:text/xml;代表客户端希望接受的数据类型
             * Content-Type:text/html 代表发送端(客户端|服务器)发送的实体数据的数据类型
             * 设置请求头信息,可接收文档类型 *|* 所有
             * 发送数据类型为编码格式UTF-8的Json字符串
             */
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("Content-type","application/json;charset=UTF-8");
            //设定传送的内容类型是可序列化的java对象
            //conn.setRequestProperty("Content-type", "application/x-java-serialized-object");
            //设置请求头编码格式
            conn.setRequestProperty("Accept-Charset", "UTF-8");
            //Connection:Keep-Alive或 Connection:close,http请求的是否保持长连接,即链接是否复用,
            //每次请求是复用已建立好的请求,还是重新建立一个新的请求
            conn.setRequestProperty("Connection","Keep-Alive");
            //设置发送请求的平台  Mozilla/5.0 (平台) 引擎版本 浏览器版本号
            //conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36");
            //带cookie的请求
            //conn.setRequestProperty("Cookie", "JSESSIONID="+SessionId);
            conn.connect();
            //conn.getResponseCode(); 获取响应码
            //获取输入流  getOutputStream会隐含的进行connect()
            writer = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8"));
            writer.print(parameter);      //参数写入
            writer.flush();

            //获取输出流
            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
            while (null != (content=reader.readLine())){
                sbf.append(content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭流和连接
            if (null != writer){
                writer.close();
            }
            if (null != reader){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != conn){
                conn.disconnect();
            }
        }
        return sbf.toString();
    }

    /**
     * HttpURLConnection使用Get请求方式
     * @param url  参数拼接在url后
     * @return
     */
    public static String doGet(String url){
        HttpURLConnection conn =  null;
        BufferedReader reader = null;       //字符输入z
        String content = null;
        StringBuffer sbf = new StringBuffer();
        URL u = null;   //创建URL对象
        try {
            u = new URL(url);
            conn = (HttpURLConnection)u.openConnection();
            //设置Post请求方式,默认为Get
            conn.setRequestMethod("GET");
            //设置服务器连接超时时间(milliseconds毫秒),超过该时间则报异常
            conn.setConnectTimeout(6000);
            //设置读取服务器资源时间,已经建立连接,并开始读取服务端资源。如果到了指定的时间,没有可能的数据被客户端读取,则报异常
            conn.setReadTimeout(5000);
            conn.setDoInput(true);
            conn.setDoOutput(false);
            //禁止使用缓存  默认为true
            conn.setUseCaches(false);
            //自动执行HTTP重定向  默认为true
            conn.setInstanceFollowRedirects(true);
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("Accept-Charset", "UTF-8");
            conn.setRequestProperty("Connection","Keep-Alive");
            //设置发送请求的平台  Mozilla/5.0 (平台) 引擎版本 浏览器版本号
            //conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36");
            //带cookie的请求
            //conn.setRequestProperty("Cookie", "JSESSIONID="+SessionId);
            conn.connect();
            //获取输出流
            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
            while (null != (content=reader.readLine())){
                sbf.append(content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭流和连接
            if (null != reader){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != conn){
                conn.disconnect();
            }
        }
        return sbf.toString();
    }
}

  

posted @ 2020-06-08 01:17  EinFaye  阅读(217)  评论(0)    收藏  举报