zoukankan      html  css  js  c++  java
  • Http请求工具类 httputil

    package com.snowfigure.kits.net;
    
    import java.io.BufferedReader;  
    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.InetSocketAddress;
    import java.net.Proxy;
    import java.net.URL; 
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;
    
    /** 
     * Http请求工具类 
     * @author snowfigure 
     * @since 2014-8-24 13:30:56 
     * @version v1.0.1 
     */ 
    public class HttpRequestUtil {
        static boolean proxySet = false;
        static String proxyHost = "127.0.0.1";
        static int proxyPort = 8087;
        /** 
         * 编码 
         * @param source 
         * @return 
         */  
        public static String urlEncode(String source,String encode) {  
            String result = source;  
            try {  
                result = java.net.URLEncoder.encode(source,encode);  
            } catch (UnsupportedEncodingException e) {  
                e.printStackTrace();  
                return "0";  
            }  
            return result;  
        }
        public static String urlEncodeGBK(String source) {  
            String result = source;  
            try {  
                result = java.net.URLEncoder.encode(source,"GBK");  
            } catch (UnsupportedEncodingException e) {  
                e.printStackTrace();  
                return "0";  
            }  
            return result;  
        }
        /** 
         * 发起http请求获取返回结果 
         * @param req_url 请求地址 
         * @return 
         */  
        public static String httpRequest(String req_url) {
            StringBuffer buffer = new StringBuffer();  
            try {  
                URL url = new URL(req_url);  
                HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
    
                httpUrlConn.setDoOutput(false);  
                httpUrlConn.setDoInput(true);  
                httpUrlConn.setUseCaches(false);  
    
                httpUrlConn.setRequestMethod("GET");  
                httpUrlConn.connect();  
    
                // 将返回的输入流转换成字符串  
                InputStream inputStream = httpUrlConn.getInputStream();  
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
    
                String str = null;  
                while ((str = bufferedReader.readLine()) != null) {  
                    buffer.append(str);  
                }  
                bufferedReader.close();  
                inputStreamReader.close();  
                // 释放资源  
                inputStream.close();  
                inputStream = null;  
                httpUrlConn.disconnect();  
    
            } catch (Exception e) {  
                System.out.println(e.getStackTrace());  
            }  
            return buffer.toString();  
        }  
    
        /** 
         * 发送http请求取得返回的输入流 
         * @param requestUrl 请求地址 
         * @return InputStream 
         */  
        public static InputStream httpRequestIO(String requestUrl) {  
            InputStream inputStream = null;  
            try {  
                URL url = new URL(requestUrl);  
                HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
                httpUrlConn.setDoInput(true);  
                httpUrlConn.setRequestMethod("GET");  
                httpUrlConn.connect();  
                // 获得返回的输入流  
                inputStream = httpUrlConn.getInputStream();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            return inputStream;  
        }
    
    
        /**
         * 向指定URL发送GET方法的请求
         * 
         * @param url
         *            发送请求的URL
         * @param param
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @return URL 所代表远程资源的响应结果
         */
        public static String sendGet(String url, String param) {
            String result = "";
            BufferedReader in = null;
            try {
                String urlNameString = url + "?" + param;
                URL realUrl = new URL(urlNameString);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 建立实际的连接
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.out.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(
                        connection.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送GET请求出现异常!" + e);
                e.printStackTrace();
            }
            // 使用finally块来关闭输入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            return result;
        }
    
        /**
         * 向指定 URL 发送POST方法的请求
         * 
         * @param url
         *            发送请求的 URL
         * @param param
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @param isproxy
         *               是否使用代理模式
         * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, String param,boolean isproxy) {
            OutputStreamWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                HttpURLConnection conn = null;
                if(isproxy){//使用代理模式
                    @SuppressWarnings("static-access")
                    Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
                    conn = (HttpURLConnection) realUrl.openConnection(proxy);
                }else{
                    conn = (HttpURLConnection) realUrl.openConnection();
                }
                // 打开和URL之间的连接
    
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setRequestMethod("POST");    // POST方法
    
    
                // 设置通用的请求属性
    
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    
                conn.connect();
    
                // 获取URLConnection对象对应的输出流
                out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
                // 发送请求参数
                out.write(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!"+e);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally{
                try{
                    if(out!=null){
                        out.close();
                    }
                    if(in!=null){
                        in.close();
                    }
                }
                catch(IOException ex){
                    ex.printStackTrace();
                }
            }
            return result;
        }    
    
        public static void main(String[] args) {
            //demo:代理访问
            String url = "http://api.adf.ly/api.php";
            String para = "key=youkeyid&youuid=uid&advert_type=int&domain=adf.ly&url=http://somewebsite.com";
    
            String sr=HttpRequestUtil.sendPost(url,para,true);
            System.out.println(sr);
        }
    
    }
  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/guoziyi/p/7200184.html
Copyright © 2011-2022 走看看