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);
        }
    
    }
  • 相关阅读:
    node实现图片分割
    Windows10开启Ubuntu子系统并搭建Docker环境
    从零搭建Window前端开发环境
    apue 文章集锦
    [apue] Linux / Windows 系统上只能建立不超过 PATH_MAX / MAX_PATH 长度的路径吗?
    [apue] 一个快速确定新系统上各类限制值的工具
    [apue] sysconf 的四种返回状态
    [apue] epoll 的一些不为人所注意的特性
    一个工业级、跨平台、轻量级的 tcp 网络服务框架:gevent
    [apue] 书中关于打印服务代码的一个错误
  • 原文地址:https://www.cnblogs.com/guoziyi/p/7200184.html
Copyright © 2011-2022 走看看