zoukankan      html  css  js  c++  java
  • javaHTTP请求工具类-使用HttpURLConnection实现



      1 package zmx.util;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.IOException;
      5 import java.io.InputStream;
      6 import java.io.InputStreamReader;
      7 import java.io.OutputStreamWriter;
      8 import java.io.UnsupportedEncodingException;
      9 import java.net.HttpURLConnection;
     10 import java.net.InetSocketAddress;
     11 import java.net.Proxy;
     12 import java.net.URL;
     13 import java.net.URLConnection;
     14 import java.util.List;
     15 import java.util.Map;
     16 
     17 /**
     18  * Http请求工具类
     19  *
     20  */
     21 public class HttpRequestUtil {
     22     static boolean proxySet = false;
     23     static String proxyHost = "127.0.0.1";
     24     static int proxyPort = 8087;
     25     /**
     26      * 编码
     27      * @param source
     28      * @return
     29      */
     30     public static String urlEncode(String source,String encode) {
     31         String result = source;
     32         try {
     33             result = java.net.URLEncoder.encode(source,encode);
     34         } catch (UnsupportedEncodingException e) {
     35             e.printStackTrace();
     36             return "0";
     37         }
     38         return result;
     39     }
     40 
     41 
     42     public static String urlEncodeGBK(String source) {
     43         String result = source;
     44         try {
     45             result = java.net.URLEncoder.encode(source,"GBK");
     46         } catch (UnsupportedEncodingException e) {
     47             e.printStackTrace();
     48             return "0";
     49         }
     50         return result;
     51     }
     52     /**
     53      * 发起http请求获取返回结果
     54      * @param req_url 请求地址
     55      * @return
     56      */
     57     public static String httpRequest(String req_url) {
     58         StringBuffer buffer = new StringBuffer();
     59         try {
     60             URL url = new URL(req_url);
     61             HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
     62 
     63             httpUrlConn.setDoOutput(true);
     64             httpUrlConn.setDoInput(true);
     65             httpUrlConn.setUseCaches(false);
     66             httpUrlConn.setConnectTimeout(50000);
     67             httpUrlConn.setReadTimeout(50000);
     68             httpUrlConn.setRequestMethod("GET");
     69            // httpUrlConn.setRequestProperty("Accept", "image/png,image/*;q=0.8,*/*;q=0.5");
     70            // httpUrlConn.setRequestProperty("Accept-Encoding", "gzip");  
     71            //httpUrlConn.setRequestProperty("Referer", "http://www.hao123.com/");
     72             httpUrlConn.connect();  //发送请求
     73             if (httpUrlConn.getResponseCode() == 200) {
     74 
     75             	// 将返回的输入流转换成字符串  
     76                 InputStream inputStream = httpUrlConn.getInputStream();
     77                 InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
     78                 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
     79 
     80                 String str = null;
     81                 while ((str = bufferedReader.readLine()) != null) {
     82                     buffer.append(str);
     83                 }
     84                 bufferedReader.close();
     85                 inputStreamReader.close();
     86                 // 释放资源  
     87                 inputStream.close();
     88                 inputStream = null;
     89                 httpUrlConn.disconnect();
     90 
     91             }
     92 
     93         } catch (Exception e) {
     94             System.out.println(e.getStackTrace());
     95         }
     96         return buffer.toString();
     97     }
     98 
     99     /**
    100      * 发送http请求取得返回的输入流
    101      * @param requestUrl 请求地址
    102      * @return InputStream
    103      */
    104     public static InputStream httpRequestIO(String requestUrl) {
    105         InputStream inputStream = null;
    106         try {
    107             URL url = new URL(requestUrl);
    108             HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
    109             httpUrlConn.setDoInput(true);
    110             httpUrlConn.setRequestMethod("GET");
    111             httpUrlConn.connect();
    112             // 获得返回的输入流  
    113             inputStream = httpUrlConn.getInputStream();
    114         } catch (Exception e) {
    115             e.printStackTrace();
    116         }
    117         return inputStream;
    118     }
    119 
    120 
    121     /**
    122      * 向指定URL发送GET方法的请求
    123      *
    124      * @param url
    125      *            发送请求的URL
    126      * @param param
    127      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    128      * @return URL 所代表远程资源的响应结果
    129      */
    130     public static String sendGet(String url, String param) {
    131         String result = "";
    132         BufferedReader in = null;
    133         try {
    134             String urlNameString = url + "?" + param;
    135             URL realUrl = new URL(urlNameString);
    136             // 打开和URL之间的连接
    137             URLConnection connection = realUrl.openConnection();
    138             // 设置通用的请求属性
    139             connection.setRequestProperty("accept", "*/*");
    140             connection.setRequestProperty("connection", "Keep-Alive");
    141             connection.setRequestProperty("user-agent",
    142                     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    143             // 建立实际的连接
    144             connection.connect();
    145             // 获取所有响应头字段
    146             Map<String, List<String>> map = connection.getHeaderFields();
    147             // 遍历所有的响应头字段
    148             for (String key : map.keySet()) {
    149                 System.out.println(key + "--->" + map.get(key));
    150             }
    151             // 定义 BufferedReader输入流来读取URL的响应
    152             in = new BufferedReader(new InputStreamReader(
    153                     connection.getInputStream()));
    154             String line;
    155             while ((line = in.readLine()) != null) {
    156                 result += line;
    157             }
    158         } catch (Exception e) {
    159             System.out.println("发送GET请求出现异常!" + e);
    160             e.printStackTrace();
    161         }
    162         // 使用finally块来关闭输入流
    163         finally {
    164             try {
    165                 if (in != null) {
    166                     in.close();
    167                 }
    168             } catch (Exception e2) {
    169                 e2.printStackTrace();
    170             }
    171         }
    172         return result;
    173     }
    174 
    175     /**
    176      * 向指定 URL 发送POST方法的请求
    177      *
    178      * @param url
    179      *            发送请求的 URL
    180      * @param param
    181      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    182      * @param isproxy
    183      *               是否使用代理模式
    184      * @return 所代表远程资源的响应结果
    185      */
    186     public static String sendPost(String url, String param,boolean isproxy) {
    187         OutputStreamWriter out = null;
    188         BufferedReader in = null;
    189         String result = "";
    190         try {
    191             URL realUrl = new URL(url);
    192             HttpURLConnection conn = null;
    193             if(isproxy){//使用代理模式
    194                 @SuppressWarnings("static-access")
    195                 Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
    196                 conn = (HttpURLConnection) realUrl.openConnection(proxy);
    197             }else{
    198                 conn = (HttpURLConnection) realUrl.openConnection();
    199             }
    200             // 打开和URL之间的连接
    201 
    202             // 发送POST请求必须设置如下两行
    203             conn.setDoOutput(true);
    204             conn.setDoInput(true);
    205             conn.setRequestMethod("POST");    // POST方法
    206 
    207 
    208             // 设置通用的请求属性
    209             conn.setRequestProperty("accept", "*/*");
    210             conn.setRequestProperty("connection", "Keep-Alive");
    211             conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    212             conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    213 
    214             conn.connect();
    215 
    216             // 获取URLConnection对象对应的输出流
    217             out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
    218             // 发送请求参数
    219             out.write(param);
    220             // flush输出流的缓冲
    221             out.flush();
    222             // 定义BufferedReader输入流来读取URL的响应
    223             in = new BufferedReader(
    224                     new InputStreamReader(conn.getInputStream()));
    225             String line;
    226             while ((line = in.readLine()) != null) {
    227                 result += line;
    228             }
    229         } catch (Exception e) {
    230             System.out.println("发送 POST 请求出现异常!"+e);
    231             e.printStackTrace();
    232         }
    233         //使用finally块来关闭输出流、输入流
    234         finally{
    235             try{
    236                 if(out!=null){
    237                     out.close();
    238                 }
    239                 if(in!=null){
    240                     in.close();
    241                 }
    242             }
    243             catch(IOException ex){
    244                 ex.printStackTrace();
    245             }
    246         }
    247         return result;
    248     }
    249 
    250     public static void main(String[] args) {
    251 
    252         String url = "http://www.baidu.com/s";
    253         String para ="word=刘德华";
    254         String sr=HttpRequestUtil.httpRequest(url);
    255         //String sr=HttpRequestUtil.sendGet(url,para);
    256         System.out.println(sr);
    257 
    258         //demo:代理访问
    259         //String sr=HttpRequestUtil.sendPost(url,para,true);
    260         //System.out.println(sr);
    261     }
    262 
    263 }
    View Code




    为人:谦逊、激情、博学、审问、慎思、明辨、 笃行
    学问:纸上得来终觉浅,绝知此事要躬行
    为事:工欲善其事,必先利其器。
    态度:道阻且长,行则将至;行而不辍,未来可期
    转载请标注出处!
  • 相关阅读:
    inner join ,left join ,right join 以及java时间转换
    华为机试-整形数组合并
    华为机试-公共字串计算
    两个字符串的最长公共子序列的长度
    华为机试-字符串通配符
    工作中总结的编程小技巧
    C语言高效编程的几招(绝对实用,绝对经典)
    Java float保留两位小数或多位小数
    新浪云、阿里云、百度云、谷歌云、亚马逊云
    java经典40+分析
  • 原文地址:https://www.cnblogs.com/ios9/p/14763304.html
Copyright © 2011-2022 走看看