但行好事
莫论前程❤

Java模拟http请求

package utils;  

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.PrintWriter;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  

/** 
 * 用于模拟HTTP请求中GET/POST方式  
 * @author liupeng 
 */  
public class HttpUtils {    

    private static final Log _logger = LogFactory.getLog(HttpUtils.class);
    /**  
     * 发送GET请求  
     * @param url  目的地址  
     * @param parameters  请求参数,Map类型。  
     * @return 远程响应结果  
     */    
    public static String sendGet(String url, Map<String, String> parameters) {   
        String result="";  
        BufferedReader in = null;// 读取响应输入流    
        StringBuffer sb = new StringBuffer();// 存储参数    
        String params = "";// 编码之后的参数  
        try {  
            // 编码请求参数    
            if(parameters.size()==1){  
                for(String name:parameters.keySet()){  
                    sb.append(name).append("=").append(  
                            java.net.URLEncoder.encode(parameters.get(name),    
                            "UTF-8"));  
                }  
                params=sb.toString();  
            }else{  
                for (String name : parameters.keySet()) {    
                    sb.append(name).append("=").append(    
                            java.net.URLEncoder.encode(parameters.get(name),    
                                    "UTF-8")).append("&");    
                }    
                String temp_params = sb.toString();    
                params = temp_params.substring(0, temp_params.length() - 1);    
            }  
            String full_url = url + "?" + params;   
            System.out.println(full_url);   
            // 创建URL对象    
            java.net.URL connURL = new java.net.URL(full_url);    
            // 打开URL连接    
            java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL.openConnection();    
            // 设置通用属性    
            httpConn.setRequestProperty("Accept", "*/*");    
            httpConn.setRequestProperty("Connection", "Keep-Alive");    
            httpConn.setRequestProperty("User-Agent",    
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");    
            // 建立实际的连接    
            httpConn.connect();    
            // 响应头部获取    
            Map<String, List<String>> headers = httpConn.getHeaderFields();    
            // 遍历所有的响应头字段    
            for (String key : headers.keySet()) {    
                _logger.info(key + "\t:\t" + headers.get(key));    
            }    
            if(httpConn.getResponseCode() == 200){
                _logger.info("请求成功!");   
                // 定义BufferedReader输入流来读取URL的响应,并设置编码方式    
                in = new BufferedReader(new InputStreamReader(httpConn    
                    .getInputStream(), "UTF-8"));    
            }else{
                _logger.info(httpConn.getResponseMessage());   
                // 定义BufferedReader输入流来读取URL的响应,并设置编码方式    
                in = new BufferedReader(new InputStreamReader(httpConn    
                    .getErrorStream(), "UTF-8"));  
            }

            String line;    
            // 读取返回的内容    
            while ((line = in.readLine()) != null) {    
                result += line; 
            }    
        } catch (Exception e) {  
            _logger.error(e.getMessage());
            e.printStackTrace();  
        }finally{  
            try {    
                if (in != null) {    
                    in.close();    
                }    
            } catch (IOException ex) { 
                _logger.error(ex.getMessage());
                ex.printStackTrace();    
            }    
        }  
        return result ;  
    }    
//=====================================================================
    /**   
     * 发送POST请求   
     * @param url  目的地址   
     * @param parameters  请求参数,Map类型。   
     * @return 远程响应结果   
     */    
    public static String sendPost(String url, Map<String, String> parameters) {    
        String result = "";// 返回的结果    
        BufferedReader in = null;// 读取响应输入流    
        PrintWriter out = null;    
        StringBuffer sb = new StringBuffer();// 处理请求参数    
        String params = "";// 编码之后的参数    
        try {    
            // 编码请求参数    
            if (parameters.size() == 1) {    
                for (String name : parameters.keySet()) {    
                    sb.append(name).append("=").append(    
                            java.net.URLEncoder.encode(parameters.get(name),    
                                    "UTF-8"));    
                }    
                params = sb.toString();    
            } else {    
                for (String name : parameters.keySet()) {    
                    sb.append(name).append("=").append(    
                            java.net.URLEncoder.encode(parameters.get(name),    
                                    "UTF-8")).append("&");    
                }    
                String temp_params = sb.toString();    
                params = temp_params.substring(0, temp_params.length() - 1);    
            }    
            // 创建URL对象    
            java.net.URL connURL = new java.net.URL(url);    
            // 打开URL连接    
            java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL    
                    .openConnection();    
            // 设置通用属性    
            httpConn.setRequestProperty("Accept", "*/*");    
            httpConn.setRequestProperty("Connection", "Keep-Alive");    
            httpConn.setRequestProperty("User-Agent",    
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");    
            // 设置POST方式    
            httpConn.setDoInput(true);    
            httpConn.setDoOutput(true);    
            // 获取HttpURLConnection对象对应的输出流    
            out = new PrintWriter(httpConn.getOutputStream());    
            // 发送请求参数    
            out.write(params);    
            // flush输出流的缓冲    
            out.flush();    
            // 定义BufferedReader输入流来读取URL的响应,设置编码方式    

            f(httpConn.getResponseCode() == 200){
                _logger.info("请求成功!");   
                // 定义BufferedReader输入流来读取URL的响应,并设置编码方式    
                in = new BufferedReader(new InputStreamReader(httpConn    
                    .getInputStream(), "UTF-8"));    
            }else{
                _logger.info(httpConn.getResponseMessage());   
                // 定义BufferedReader输入流来读取URL的响应,并设置编码方式    
                in = new BufferedReader(new InputStreamReader(httpConn    
                    .getErrorStream(), "UTF-8"));  
            }
            String line;    
            // 读取返回的内容    
            while ((line = in.readLine()) != null) {    
                result += line;    
            }    
        } catch (Exception e) {    
            _logger.error(e.getMessage());
            e.printStackTrace();    
        } finally {    
            try {    
                if (out != null) {    
                    out.close();    
                }    
                if (in != null) {    
                    in.close();    
                }    
            } catch (IOException ex) {    
                _logger.error(ex.getMessage());
                ex.printStackTrace();    
            }    
        }    
        return result;    
    }    

//==========================================================
/**   
  * 发送POST请求   
  * @param url  目的地址   
  * @param parameters  请求参数,Map类型。   
  * @return 远程响应结果   
  */    
public static String downloadFile(String url, String path,String fileName, String suffix) {   
   String result = "";// 返回的结果    
   BufferedReader in = null;// 读取响应输入流    
   PrintWriter out = null;    
   StringBuffer sb = new StringBuffer();// 处理请求参数    
   String params = "";// 编码之后的参数    
   BufferWriter bufferedWriter = null;
   try {    
      // 编码请求参数    
      if (parameters.size() == 1) {    
            for (String name : parameters.keySet()) {    
                sb.append(name).append("=").append(    
                        java.net.URLEncoder.encode(parameters.get(name),    
                                    "UTF-8"));    
            }    
            params = sb.toString();    
      } else {    
            for (String name : parameters.keySet()) {    
               sb.append(name).append("=").append(    
                      java.net.URLEncoder.encode(parameters.get(name),    
                               "UTF-8")).append("&");    
            }    
            String temp_params = sb.toString();    
            params = temp_params.substring(0, temp_params.length() - 1);    
       }    
       // 创建URL对象    
       java.net.URL connURL = new java.net.URL(url);    
       // 打开URL连接    
       java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL.openConnection();    
       // 设置通用属性    
       httpConn.setRequestProperty("Accept", "*/*");    
       httpConn.setRequestProperty("Connection", "Keep-Alive");    
       httpConn.setRequestProperty("User-Agent",    
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");    
       // 设置POST方式    
       httpConn.setDoInput(true);    
       httpConn.setDoOutput(true);    
       // 获取HttpURLConnection对象对应的输出流    
       out = new PrintWriter(httpConn.getOutputStream());    
       // 发送请求参数    
       out.write(params);    
       // flush输出流的缓冲    
       out.flush();    
       File outFile = new File(path + fileName + suffix);
       bufferedWriter = new BufferedWriter(new FileWriter(outFile));
       // 定义BufferedReader输入流来读取URL的响应,设置编码方式    
       if(httpConn.getResponseCode() == 200){
           _logger.info("请求成功!");   
           // 定义BufferedReader输入流来读取URL的响应,并设置编码方式    
           in = new BufferedReader(new InputStreamReader(httpConn    
                    .getInputStream(), "UTF-8"));    
           //读取返回的内容
           int count = 0;
           while((line = in.readLine()) != null){
               bufferedWriter.write(line);
               bufferedWriter.newLine();
               count++;
               if(count == 100){
                   bufferedWriter.flush();
                   count = 0;
               }
               bufferedWriter.flush();
           }
       }else{
           _logger.info(httpConn.getResponseMessage());   
           // 定义BufferedReader输入流来读取URL的响应,并设置编码方式    
           in = new BufferedReader(new InputStreamReader(httpConn    
                    .getErrorStream(), "UTF-8"));  
        }
        String line;    
        // 读取返回的内容    
        while ((line = in.readLine()) != null) {    
           result += line;    
        }    
   } catch (Exception e) {    
        _logger.error(e.getMessage());
        e.printStackTrace();    
   } finally {    
        try {    
            if (out != null) {    
                 out.close();    
            }    
            if (in != null) {    
                 in.close();    
            }    
        } catch (IOException ex) {    
            _logger.error(ex.getMessage());
            ex.printStackTrace();    
        }    
   }    
   return result;    
}    
//=================================================================
  /**   
   * 主函数,测试请求   
   * @param args
   */    
public static void main(String[] args) {    
    Map<String, String> parameters = new HashMap<String, String>();    
    parameters.put("name", "sarin");    
    //    http://www.baidu.com?name=sarin
    String result =sendGet("http://www.baidu.com", parameters);  
    System.out.println(result);   
}    
赞(0) 打赏
未经允许不得转载:刘鹏博客 » Java模拟http请求
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏