• java 原生 HttpClient


    package org.rx.socks.http;
    
    import com.google.common.base.Strings;
    import lombok.SneakyThrows;
    import org.rx.common.App;
    import org.rx.common.Contract;
    import org.rx.common.SystemException;
    import org.rx.socks.Sockets;
    import org.rx.io.IOStream;
    
    import java.io.UnsupportedEncodingException;
    import java.net.*;
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    import static org.rx.common.Contract.eq;
    import static org.rx.common.Contract.isNull;
    
    /**
     * http://www.jianshu.com/p/aa3f066263ed
     */
    public class HttpClient {
        //region StaticMembers
        @SneakyThrows
        public static String urlEncode(String str) {
            if (Strings.isNullOrEmpty(str)) {
                return "";
            }
    
            return URLEncoder.encode(str, Contract.Utf8).replace("+", "%20");
        }
    
        public static Map<String, String> parseQueryString(String queryString) {
            Map<String, String> map = new LinkedHashMap<>();
            if (queryString == null) {
                return map;
            }
    
            String[] pairs = queryString.split("&");
            try {
                for (String pair : pairs) {
                    int idx = pair.indexOf("=");
                    String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), Contract.Utf8) : pair;
                    String value = idx > 0 && pair.length() > idx + 1
                            ? URLDecoder.decode(pair.substring(idx + 1), Contract.Utf8)
                            : null;
                    map.put(key, value);
                }
            } catch (UnsupportedEncodingException ex) {
                throw SystemException.wrap(ex);
            }
            return map;
        }
    
        public static String buildQueryString(String baseUrl, Map<String, String> params) {
            if (params == null) {
                return baseUrl;
            }
            if (baseUrl == null) {
                baseUrl = "";
            }
    
            String c = baseUrl.indexOf("?") == -1 ? "?" : "&";
            StringBuilder url = new StringBuilder(baseUrl);
            for (String key : params.keySet()) {
                String val = params.get(key);
                url.append(url.length() == baseUrl.length() ? c : "&").append(urlEncode(key)).append("=")
                        .append(val == null ? "" : urlEncode(val));
            }
            return url.toString();
        }
        //endregion
    
        public static final String GetMethod = "GET", PostMethod = "POST";
        private static final String FormMimeType = "application/x-www-form-urlencoded", JsonMimeType = "application/json";
        private static final String UserAgent = "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36";
        private String contentType;
        private int timeout;
        private String proxyHost;
    
        public String getContentType() {
            return contentType;
        }
    
        public void setContentType(String contentType) {
            this.contentType = contentType;
        }
    
        public int getTimeout() {
            return timeout;
        }
    
        public void setTimeout(int timeout) {
            this.timeout = timeout;
        }
    
        public String getProxyHost() {
            return proxyHost;
        }
    
        public void setProxyHost(String proxyHost) {
            this.proxyHost = proxyHost;
        }
    
        public HttpClient() {
            timeout = App.TimeoutInfinite;
        }
    
        public String httpGet(String url) {
            return httpGet(url, null);
        }
    
        public String httpGet(String url, Map<String, String> params) {
            if (params != null && params.size() > 0) {
                url = buildQueryString(url, params);
            }
            return exec(url, GetMethod, null, contentType, timeout);
        }
    
        public String httpPost(String url, Map<String, String> params) {
            contentType = FormMimeType;
            return exec(url, PostMethod, buildQueryString("", params).substring(1), contentType, timeout);
        }
    
        public String httpPost(String url, Object jsonEntity) {
            contentType = JsonMimeType;
            return exec(url, PostMethod, Contract.toJsonString(jsonEntity), contentType, timeout);
        }
    
        private String exec(String url, String method, String content, String contentType, int timeout) {
            String charset = Contract.Utf8;
            try {
                URL uri = new URL(url);
                HttpURLConnection client = (HttpURLConnection) (proxyHost != null
                        ? uri.openConnection(new Proxy(Proxy.Type.HTTP, Sockets.parseAddress(proxyHost)))
                        : uri.openConnection());
                client.setDoOutput(true);
                client.setDoInput(true);
                client.setUseCaches(false);
                client.setRequestProperty("User-Agent", UserAgent);
                client.setRequestProperty("Accept-Charset", charset);
                client.setRequestMethod(method);
                if (!App.isNullOrEmpty(contentType)) {
                    client.setRequestProperty("Content-Type", contentType + ";charset=" + charset);
                }
                if (timeout > App.TimeoutInfinite) {
                    client.setConnectTimeout(timeout);
                    client.setReadTimeout(timeout);
                }
                client.connect();
                if (eq(method, PostMethod) && !App.isNullOrEmpty(content)) {
                    IOStream.writeString(client.getOutputStream(), content, charset);
                }
    
                int resCode = client.getResponseCode();
                if (resCode != HttpURLConnection.HTTP_OK) {
    
                }
                return IOStream.readString(client.getInputStream(), isNull(client.getContentEncoding(), charset));
            } catch (Exception ex) {
                throw SystemException.wrap(ex);
            }
        }
    }

    666   网购半价返利 http://f-li.cn

  • 相关阅读:
    error LNK2019: 无法解析的外部符号 该符号在函数 中被引用 解决方案
    【OSG】运行OSG示例出现的奶牛不完整问题
    python 遍历文件夹
    python os操作
    python io操作
    python request 代理/超时/证书
    python tuple
    python dict
    python request post
    python request get
  • 原文地址:https://www.cnblogs.com/Googler/p/10887290.html
Copyright © 2020-2023  润新知