首页 > 代码库 > java模拟http的get和post请求

java模拟http的get和post请求

如题,使用Java模拟GET和POST请求。使用GET可以实现网页抓取,使用POST可以实现对某些网站登录的暴力破解。不过仅是练习,实际意义不大。

import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.io.Reader;import java.net.HttpURLConnection;import java.net.ProtocolException;import java.net.URL;import java.util.Map;/** * HTTP工具 * @author robinzhang * */public class HttpUtil {    /**     * 请求类型: GET     */    public final static String GET = "GET";    /**     * 请求类型: POST     */    public final static String POST = "POST";        /**     * 模拟Http Get请求     * @param urlStr     *             请求路径     * @param paramMap     *             请求参数     * @return     * @throws Exception     */    public static String get(String urlStr, Map<String, String> paramMap) throws Exception{        urlStr = urlStr + "?" + getParamString(paramMap);        HttpURLConnection conn = null;        try{            //创建URL对象            URL url = new URL(urlStr);            //获取URL连接            conn = (HttpURLConnection) url.openConnection();            //设置通用的请求属性            setHttpUrlConnection(conn, GET);            //建立实际的连接            conn.connect();            //获取响应的内容            return readResponseContent(conn.getInputStream());        }finally{            if(null!=conn) conn.disconnect();        }    }        /**     * 模拟Http Post请求     * @param urlStr     *             请求路径     * @param paramMap     *             请求参数     * @return     * @throws Exception      */    public static String post(String urlStr, Map<String, String> paramMap) throws Exception{        HttpURLConnection conn = null;        PrintWriter writer = null;        try{            //创建URL对象            URL url = new URL(urlStr);            //获取请求参数            String param = getParamString(paramMap);            //获取URL连接            conn = (HttpURLConnection) url.openConnection();            //设置通用请求属性            setHttpUrlConnection(conn, POST);            //建立实际的连接            conn.connect();            //将请求参数写入请求字符流中            writer = new PrintWriter(conn.getOutputStream());            writer.print(param);            writer.flush();            //读取响应的内容            return readResponseContent(conn.getInputStream());        }finally{            if(null!=conn) conn.disconnect();            if(null!=writer) writer.close();        }    }        /**     * 读取响应字节流并将之转为字符串     * @param in     *         要读取的字节流     * @return     * @throws IOException     */    private static String readResponseContent(InputStream in) throws IOException{        Reader reader = null;        StringBuilder content = new StringBuilder();        try{            reader = new InputStreamReader(in);            char[] buffer = new char[1024];            int head = 0;            while( (head=reader.read(buffer))>0 ){                content.append(new String(buffer, 0, head));            }            return content.toString();        }finally{            if(null!=in) in.close();            if(null!=reader) reader.close();        }    }        /**     * 设置Http连接属性      * @param conn     *             http连接     * @return     * @throws ProtocolException      * @throws Exception      */    private static void setHttpUrlConnection(HttpURLConnection conn, String requestMethod) throws ProtocolException{        conn.setRequestMethod(requestMethod);        conn.setRequestProperty("accept", "*/*");        conn.setRequestProperty("Accept-Language", "zh-CN");        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");        conn.setRequestProperty("Proxy-Connection", "Keep-Alive");        if(null!=requestMethod && POST.equals(requestMethod)){            conn.setDoOutput(true);            conn.setDoInput(true);        }    }        /**     * 将参数转为路径字符串     * @param params     *             参数     * @return     */    private static String getParamString(Map<String, String> paramMap){        if(null==paramMap || paramMap.isEmpty()){            return "";        }        StringBuilder builder = new StringBuilder();        for(String key : paramMap.keySet() ){            builder.append("&")                   .append(key).append("=").append(paramMap.get(key));        }        return builder.deleteCharAt(0).toString();    }        public static void main(String[] args){        try {            System.out.println( get("http://127.0.0.1/crazy_java.pdf", null) );        } catch (Exception e) {            e.printStackTrace();        }    }}

java模拟http的get和post请求