JAVA实现HTTP请求

目前JAVA实现HTTP请求的方法用的最多的有两种:

一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,HttpClient3.1 是 org.apache.commons.httpclient下操作远程 url的工具包,虽然已不再更新,但实现工作中使用httpClient3.1的代码还是很多,HttpClient4.5是org.apache.http.client下操作远程 url的工具包,最新的;

另一种则是通过HttpURLConnection去实现,HttpURLConnection是JAVA的标准类,是JAVA比较原生的一种实现方式。

公司用的第二种HttpURLConnection,该方式返回数据是String类型,接收后需要用 JsonUtil.getObject(resultStr, ResultInfo.class);获取json对象

in.readLine()得到的就是返回值,不需要循环就行:
 public static String sendPost(String serverUrl, String param, String charsetName, String contentType) {
        ResultInfo resultInfo = null;
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            long t1 = System.currentTimeMillis();
            URL url = new URL(serverUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);    // 可以发送数据
            conn.setDoInput(true);    // 可以接收数据
            conn.setRequestMethod("POST");    // POST方法
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            // 必须注意此处需要设置UserAgent,否则google会返回403
            conn.setRequestProperty
                    ("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
            if(contentType != null){
                conn.setRequestProperty("Content-Type", contentType);
            }
            if (charsetName != null) {
                conn.setRequestProperty("Accept-Charset", charsetName);
                conn.setRequestProperty("contentType", charsetName);
            }
            conn.setConnectTimeout(HttpUtils.TIMEOUT);
            conn.setReadTimeout(HttpUtils.TIMEOUT_MAX);
            conn.connect();
            // 写入的POST数据
            OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), charsetName);
            osw.write(param);
            osw.flush();
            osw.close();

            // 读取响应数据
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), charsetName));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            long t2 = System.currentTimeMillis() - t1;
            logger.info("发送 POST 请求serverUrl={},param={},耗时:{}", serverUrl, param, t2);
        } catch (Exception e) {
            logger.error("发送 POST 请求出现异常!serverUrl={},param={}", serverUrl, param, e);
        }finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                logger.error("异常信息=", ex);
            }
        }

        return result;
    }

 

 

 

posted @ 2019-09-11 21:34  zhaoyanhao  阅读(459)  评论(0编辑  收藏  举报