zoukankan      html  css  js  c++  java
  • HTTP接口开发专题二(发送http请求的接口工具类)

    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.Map.Entry;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLSession;
    /**
     * Http工具类*/
    public class HttpUtils {
     /**
         * 解析出url参数中的键值对 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
         * 
         * @param URL
         *            url地址
         * @return url请求参数部分
         */
        public static Map<String, String> URLRequest(String URL) {
            Map<String, String> mapRequest = new HashMap<String, String>();
    
            String[] arrSplit = null;
    
            String strUrlParam = truncateUrlPage(URL);
            if (strUrlParam == null) {
                return mapRequest;
            }
            // 每个键值为一组 www.2cto.com
            arrSplit = strUrlParam.split("[&]");
            for (String strSplit : arrSplit) {
                String[] arrSplitEqual = null;
                arrSplitEqual = strSplit.split("[=]");
    
                // 解析出键值
                if (arrSplitEqual.length > 1) {
                    // 正确解析
                    mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]);
    
                } else {
                    if (arrSplitEqual[0] != "") {
                        // 只有参数没有值,不加入
                        mapRequest.put(arrSplitEqual[0], "");
                    }
                }
            }
            return mapRequest;
        }
        
        /**
         * 发起HTTP POST请求。
         * @param urlStr 请求URL
         * @param params 请求参数
         * @return 响应结果
         */
        public static String post(String urlStr, Map<String, Object> params) {
            URL url = null;
            StringBuffer buff = new StringBuffer("");
            
            HttpURLConnection urlConn = null;
            OutputStream out = null;
            BufferedReader in = null;
            try {
                Set<Entry<String, Object>> keySet = params.entrySet();
                
                int i = 0;
    //将map参数转换为 key1=value1&key2=value2 的形式
    for (Iterator<Entry<String, Object>> iter = keySet.iterator(); iter.hasNext();) { Entry<String,Object> entry = iter.next(); // 跳过值为null的参数 if(entry.getValue() == null) { continue; } if (i > 0) { buff.append("&"); } buff.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue().toString(), "UTF-8")); i++; } url = new URL(urlStr);//把urlStr转变为URL类对象
           //用来解决对于https接口地址的访问 HostnameVerifier hv
    = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); return true; } }; //访问https接口时,服务器不信任我们自己创建的证书,所以在代码中必须要忽略证书信任问题。只要在创建connection之前调用两个方法: trustAllHttpsCertificates(); HttpsURLConnection.setDefaultHostnameVerifier(hv); urlConn = (HttpURLConnection) url.openConnection(); //打开URL连接 urlConn.setDefaultUseCaches(false); //post请求不能使用缓存 urlConn.setConnectTimeout(30000); urlConn.setReadTimeout(60000); urlConn.setDoInput(true); urlConn.setDoOutput(true); urlConn.setRequestMethod("POST"); urlConn.setUseCaches(false); //post请求不能使用缓存 urlConn.setRequestProperty("Accept-Charset","UTF-8"); //设置编码方式 //没有设置内容类型,默认是Content-Type: application/x-www-form-urlencoded out = urlConn.getOutputStream(); out.write(buff.toString().getBytes("UTF-8")); //请求体 in = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"UTF-8")); String data = ""; StringBuffer sb = new StringBuffer(""); while (null != (data = in.readLine())) { sb.append(data); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { try { if(out != null) { out.close(); } if(in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } if(urlConn != null) { urlConn.disconnect(); } } return ""; } /** * 发起HTTP POST请求。 * @param urlStr 请求URL * @param output POST数据,这里是json格式字符串 * @return 响应结果 */ public static String post(String urlStr, String output) { URL url = null; HttpURLConnection urlConn = null; OutputStream out = null; BufferedReader in = null; try { url = new URL(urlStr); urlConn = (HttpURLConnection) url.openConnection(); urlConn.setDefaultUseCaches(false); urlConn.setConnectTimeout(30000); urlConn.setReadTimeout(60000); urlConn.setDoInput(true); urlConn.setDoOutput(true); urlConn.setRequestMethod("POST"); urlConn.setUseCaches(false); urlConn.setRequestProperty("Accept-Charset","UTF-8"); //HttpURLConnection.setRequestProperty(String key,String value);  设置http请求头,这里设置编码格式 urlConn.setRequestProperty("Content-Type", "application/json"); //设置内容类型:json格式 out = urlConn.getOutputStream(); out.write(output.getBytes("UTF-8")); in = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"UTF-8")); String data = ""; StringBuffer sb = new StringBuffer(""); while (null != (data = in.readLine())) { sb.append(data); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { try { if(out != null) { out.close(); } if(in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } if(urlConn != null) { urlConn.disconnect(); } } return ""; } //用来解决不能访问https请求的问题 private static void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); trustAllCerts[0] = tm; javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext .getInstance("SSL"); sc.init(null, trustAllCerts, null); javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc .getSocketFactory()); } //用来解决不能访问https请求的问题 private static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted( java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted( java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } }
    }
  • 相关阅读:
    MySQL用户信息表中主键userID自动增加问题
    PHP输出当前系统时间
    PHP连接MySQL方式比较问题
    DWZ分页处理
    NHibernate ICriteria 查询[转 十年如一]
    HttpContext.Current.Request.Files后台取不到值的解决方法 [转]
    Hibernate Projections(投影、统计、不重复结果)[转]
    细说Form(表单)[ 转 Fish Li]
    HTML <a> 标签的 rel 属性
    dwz rel
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/9182464.html
Copyright © 2011-2022 走看看