java 4种http请求,get,post方式

来源:互联网 发布:hyperion 软件 编辑:程序博客网 时间:2024/06/06 15:44
import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.Socket;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;/** * @Description:发送http请求帮助类 * @author:liuyc * @time:2016年5月17日 下午3:25:32 */public class HttpClientHelper {    /**     * @Description:使用HttpURLConnection发送post请求     * @author:liuyc     * @time:2016年5月17日 下午3:26:07     */    public static String sendPost(String urlParam, Map<String, Object> params, String charset) {        StringBuffer resultBuffer = null;        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> e : params.entrySet()) {                sbParams.append(e.getKey());                sbParams.append("=");                sbParams.append(e.getValue());                sbParams.append("&");            }        }        HttpURLConnection con = null;        OutputStreamWriter osw = null;        BufferedReader br = null;        // 发送请求        try {            URL url = new URL(urlParam);            con = (HttpURLConnection) url.openConnection();            con.setRequestMethod("POST");            con.setDoOutput(true);            con.setDoInput(true);            con.setUseCaches(false);            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            if (sbParams != null && sbParams.length() > 0) {                osw = new OutputStreamWriter(con.getOutputStream(), charset);                osw.write(sbParams.substring(0, sbParams.length() - 1));                osw.flush();            }            // 读取返回内容            resultBuffer = new StringBuffer();            int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));            if (contentLength > 0) {                br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));                String temp;                while ((temp = br.readLine()) != null) {                    resultBuffer.append(temp);                }            }        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (osw != null) {                try {                    osw.close();                } catch (IOException e) {                    osw = null;                    throw new RuntimeException(e);                } finally {                    if (con != null) {                        con.disconnect();                        con = null;                    }                }            }            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    br = null;                    throw new RuntimeException(e);                } finally {                    if (con != null) {                        con.disconnect();                        con = null;                    }                }            }        }        return resultBuffer.toString();    }    /**     * @Description:使用URLConnection发送post     * @author:liuyc     * @time:2016年5月17日 下午3:26:52     */    public static String sendPost2(String urlParam, Map<String, Object> params, String charset) {        StringBuffer resultBuffer = null;        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> e : params.entrySet()) {                sbParams.append(e.getKey());                sbParams.append("=");                sbParams.append(e.getValue());                sbParams.append("&");            }        }        URLConnection con = null;        OutputStreamWriter osw = null;        BufferedReader br = null;        try {            URL realUrl = new URL(urlParam);            // 打开和URL之间的连接            con = realUrl.openConnection();            // 设置通用的请求属性            con.setRequestProperty("accept", "*/*");            con.setRequestProperty("connection", "Keep-Alive");            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            // 发送POST请求必须设置如下两行            con.setDoOutput(true);            con.setDoInput(true);            // 获取URLConnection对象对应的输出流            osw = new OutputStreamWriter(con.getOutputStream(), charset);            if (sbParams != null && sbParams.length() > 0) {                // 发送请求参数                osw.write(sbParams.substring(0, sbParams.length() - 1));                // flush输出流的缓冲                osw.flush();            }            // 定义BufferedReader输入流来读取URL的响应            resultBuffer = new StringBuffer();            int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));            if (contentLength > 0) {                br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));                String temp;                while ((temp = br.readLine()) != null) {                    resultBuffer.append(temp);                }            }        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (osw != null) {                try {                    osw.close();                } catch (IOException e) {                    osw = null;                    throw new RuntimeException(e);                }            }            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    br = null;                    throw new RuntimeException(e);                }            }        }        return resultBuffer.toString();    }    /**     * @Description:发送get请求保存下载文件     * @author:liuyc     * @time:2016年5月17日 下午3:27:29     */    public static void sendGetAndSaveFile(String urlParam, Map<String, Object> params, String fileSavePath) {        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> entry : params.entrySet()) {                sbParams.append(entry.getKey());                sbParams.append("=");                sbParams.append(entry.getValue());                sbParams.append("&");            }        }        HttpURLConnection con = null;        BufferedReader br = null;        FileOutputStream os = null;        try {            URL url = null;            if (sbParams != null && sbParams.length() > 0) {                url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));            } else {                url = new URL(urlParam);            }            con = (HttpURLConnection) url.openConnection();            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            con.connect();            InputStream is = con.getInputStream();            os = new FileOutputStream(fileSavePath);            byte buf[] = new byte[1024];            int count = 0;            while ((count = is.read(buf)) != -1) {                os.write(buf, 0, count);            }            os.flush();        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (os != null) {                try {                    os.close();                } catch (IOException e) {                    os = null;                    throw new RuntimeException(e);                } finally {                    if (con != null) {                        con.disconnect();                        con = null;                    }                }            }            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    br = null;                    throw new RuntimeException(e);                } finally {                    if (con != null) {                        con.disconnect();                        con = null;                    }                }            }        }    }    /**     * @Description:使用HttpURLConnection发送get请求     * @author:liuyc     * @time:2016年5月17日 下午3:27:29     */    public static String sendGet(String urlParam, Map<String, Object> params, String charset) {        StringBuffer resultBuffer = null;        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> entry : params.entrySet()) {                sbParams.append(entry.getKey());                sbParams.append("=");                sbParams.append(entry.getValue());                sbParams.append("&");            }        }        HttpURLConnection con = null;        BufferedReader br = null;        try {            URL url = null;            if (sbParams != null && sbParams.length() > 0) {                url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));            } else {                url = new URL(urlParam);            }            con = (HttpURLConnection) url.openConnection();            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            con.connect();            resultBuffer = new StringBuffer();            br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));            String temp;            while ((temp = br.readLine()) != null) {                resultBuffer.append(temp);            }        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    br = null;                    throw new RuntimeException(e);                } finally {                    if (con != null) {                        con.disconnect();                        con = null;                    }                }            }        }        return resultBuffer.toString();    }    /**     * @Description:使用URLConnection发送get请求     * @author:liuyc     * @time:2016年5月17日 下午3:27:58     */    public static String sendGet2(String urlParam, Map<String, Object> params, String charset) {        StringBuffer resultBuffer = null;        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> entry : params.entrySet()) {                sbParams.append(entry.getKey());                sbParams.append("=");                sbParams.append(entry.getValue());                sbParams.append("&");            }        }        BufferedReader br = null;        try {            URL url = null;            if (sbParams != null && sbParams.length() > 0) {                url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));            } else {                url = new URL(urlParam);            }            URLConnection con = url.openConnection();            // 设置请求属性            con.setRequestProperty("accept", "*/*");            con.setRequestProperty("connection", "Keep-Alive");            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            // 建立连接            con.connect();            resultBuffer = new StringBuffer();            br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));            String temp;            while ((temp = br.readLine()) != null) {                resultBuffer.append(temp);            }        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    br = null;                    throw new RuntimeException(e);                }            }        }        return resultBuffer.toString();    }    /**     * @Description:使用HttpClient发送post请求     * @author:liuyc     * @time:2016年5月17日 下午3:28:23     */    public static String httpClientPost(String urlParam, Map<String, Object> params, String charset) {        StringBuffer resultBuffer = null;        HttpClient client = new DefaultHttpClient();        HttpPost httpPost = new HttpPost(urlParam);        // 构建请求参数        List<NameValuePair> list = new ArrayList<NameValuePair>();        Iterator<Entry<String, Object>> iterator = params.entrySet().iterator();        while (iterator.hasNext()) {            Entry<String, Object> elem = iterator.next();            list.add(new BasicNameValuePair(elem.getKey(), String.valueOf(elem.getValue())));        }        BufferedReader br = null;        try {            if (list.size() > 0) {                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);                httpPost.setEntity(entity);            }            HttpResponse response = client.execute(httpPost);            // 读取服务器响应数据            resultBuffer = new StringBuffer();            br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));            String temp;            while ((temp = br.readLine()) != null) {                resultBuffer.append(temp);            }        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    br = null;                    throw new RuntimeException(e);                }            }        }        return resultBuffer.toString();    }    /**     * @Description:使用HttpClient发送get请求     * @author:liuyc     * @time:2016年5月17日 下午3:28:56     */    public static String httpClientGet(String urlParam, Map<String, Object> params, String charset) {        StringBuffer resultBuffer = null;        HttpClient client = new DefaultHttpClient();        BufferedReader br = null;        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> entry : params.entrySet()) {                sbParams.append(entry.getKey());                sbParams.append("=");                try {                    sbParams.append(URLEncoder.encode(String.valueOf(entry.getValue()), charset));                } catch (UnsupportedEncodingException e) {                    throw new RuntimeException(e);                }                sbParams.append("&");            }        }        if (sbParams != null && sbParams.length() > 0) {            urlParam = urlParam + "?" + sbParams.substring(0, sbParams.length() - 1);        }        HttpGet httpGet = new HttpGet(urlParam);        try {            HttpResponse response = client.execute(httpGet);            // 读取服务器响应数据            br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));            String temp;            resultBuffer = new StringBuffer();            while ((temp = br.readLine()) != null) {                resultBuffer.append(temp);            }        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    br = null;                    throw new RuntimeException(e);                }            }        }        return resultBuffer.toString();    }    /**     * @Description:使用socket发送post请求     * @author:liuyc     * @time:2016年5月18日 上午9:26:22     */    public static String sendSocketPost(String urlParam, Map<String, Object> params, String charset) {        String result = "";        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> entry : params.entrySet()) {                sbParams.append(entry.getKey());                sbParams.append("=");                sbParams.append(entry.getValue());                sbParams.append("&");            }        }        Socket socket = null;        OutputStreamWriter osw = null;        InputStream is = null;        try {            URL url = new URL(urlParam);            String host = url.getHost();            int port = url.getPort();            if (-1 == port) {                port = 80;            }            String path = url.getPath();            socket = new Socket(host, port);            StringBuffer sb = new StringBuffer();            sb.append("POST " + path + " HTTP/1.1\r\n");            sb.append("Host: " + host + "\r\n");            sb.append("Connection: Keep-Alive\r\n");            sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");            sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");            // 这里一个回车换行,表示消息头写完,不然服务器会继续等待            sb.append("\r\n");            if (sbParams != null && sbParams.length() > 0) {                sb.append(sbParams.substring(0, sbParams.length() - 1));            }            osw = new OutputStreamWriter(socket.getOutputStream());            osw.write(sb.toString());            osw.flush();            is = socket.getInputStream();            String line = null;            // 服务器响应体数据长度            int contentLength = 0;            // 读取http响应头部信息            do {                line = readLine(is, 0, charset);                if (line.startsWith("Content-Length")) {                    // 拿到响应体内容长度                    contentLength = Integer.parseInt(line.split(":")[1].trim());                }                // 如果遇到了一个单独的回车换行,则表示请求头结束            } while (!line.equals("\r\n"));            // 读取出响应体数据(就是你要的数据)            result = readLine(is, contentLength, charset);        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (osw != null) {                try {                    osw.close();                } catch (IOException e) {                    osw = null;                    throw new RuntimeException(e);                } finally {                    if (socket != null) {                        try {                            socket.close();                        } catch (IOException e) {                            socket = null;                            throw new RuntimeException(e);                        }                    }                }            }            if (is != null) {                try {                    is.close();                } catch (IOException e) {                    is = null;                    throw new RuntimeException(e);                } finally {                    if (socket != null) {                        try {                            socket.close();                        } catch (IOException e) {                            socket = null;                            throw new RuntimeException(e);                        }                    }                }            }        }        return result;    }    /**     * @Description:使用socket发送get请求     * @author:liuyc     * @time:2016年5月18日 上午9:27:18     */    public static String sendSocketGet(String urlParam, Map<String, Object> params, String charset) {        String result = "";        // 构建请求参数        StringBuffer sbParams = new StringBuffer();        if (params != null && params.size() > 0) {            for (Entry<String, Object> entry : params.entrySet()) {                sbParams.append(entry.getKey());                sbParams.append("=");                sbParams.append(entry.getValue());                sbParams.append("&");            }        }        Socket socket = null;        OutputStreamWriter osw = null;        InputStream is = null;        try {            URL url = new URL(urlParam);            String host = url.getHost();            int port = url.getPort();            if (-1 == port) {                port = 80;            }            String path = url.getPath();            socket = new Socket(host, port);            StringBuffer sb = new StringBuffer();            sb.append("GET " + path + " HTTP/1.1\r\n");            sb.append("Host: " + host + "\r\n");            sb.append("Connection: Keep-Alive\r\n");            sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");            sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");            // 这里一个回车换行,表示消息头写完,不然服务器会继续等待            sb.append("\r\n");            if (sbParams != null && sbParams.length() > 0) {                sb.append(sbParams.substring(0, sbParams.length() - 1));            }            osw = new OutputStreamWriter(socket.getOutputStream());            osw.write(sb.toString());            osw.flush();            is = socket.getInputStream();            String line = null;            // 服务器响应体数据长度            int contentLength = 0;            // 读取http响应头部信息            do {                line = readLine(is, 0, charset);                if (line.startsWith("Content-Length")) {                    // 拿到响应体内容长度                    contentLength = Integer.parseInt(line.split(":")[1].trim());                }                // 如果遇到了一个单独的回车换行,则表示请求头结束            } while (!line.equals("\r\n"));            // 读取出响应体数据(就是你要的数据)            result = readLine(is, contentLength, charset);        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (osw != null) {                try {                    osw.close();                } catch (IOException e) {                    osw = null;                    throw new RuntimeException(e);                } finally {                    if (socket != null) {                        try {                            socket.close();                        } catch (IOException e) {                            socket = null;                            throw new RuntimeException(e);                        }                    }                }            }            if (is != null) {                try {                    is.close();                } catch (IOException e) {                    is = null;                    throw new RuntimeException(e);                } finally {                    if (socket != null) {                        try {                            socket.close();                        } catch (IOException e) {                            socket = null;                            throw new RuntimeException(e);                        }                    }                }            }        }        return result;    }    /**     * @Description:读取一行数据,contentLe内容长度为0时,读取响应头信息,不为0时读正文     * @time:2016年5月17日 下午6:11:07     */    private static String readLine(InputStream is, int contentLength, String charset) throws IOException {        List<Byte> lineByte = new ArrayList<Byte>();        byte tempByte;        int cumsum = 0;        if (contentLength != 0) {            do {                tempByte = (byte) is.read();                lineByte.add(Byte.valueOf(tempByte));                cumsum++;            } while (cumsum < contentLength);// cumsum等于contentLength表示已读完        } else {            do {                tempByte = (byte) is.read();                lineByte.add(Byte.valueOf(tempByte));            } while (tempByte != 10);// 换行符的ascii码值为10        }        byte[] resutlBytes = new byte[lineByte.size()];        for (int i = 0; i < lineByte.size(); i++) {            resutlBytes[i] = (lineByte.get(i)).byteValue();        }        return new String(resutlBytes, charset);    }}

以上4种分别可发送get和post请求的方法,第1种:HttpURLConnection、第2种:URLConnection、第3种:HttpClient、第4种:Socket,朋友们要注意的是,使用第3种HttpClient时需要依赖于三个jar包,分别是:apache-httpcomponents-httpclient.jar、commons-logging-1.0.4.jar、httpcore-4.1.1.jar。好了就到这里吧,有问题记得留言哦

1 0
原创粉丝点击