zoukankan      html  css  js  c++  java
  • HttpClient使用学习

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.commons.httpclient. * ;
    import org.apache.commons.httpclient.auth.AuthScope;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.methods.GetMethod;
    
    import java.util.Iterator;
    import java.util.Map;
    import java.net.SocketTimeoutException;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class HttpInvoker {
        private Log logger = LogFactory.getLog(HttpInvoker.class);
        private static HttpInvoker httpInvoker = new HttpInvoker();
        private HttpClient client = null;
        private String charset = "gbk";
        private int timeout = 10000;
        private boolean useProxy = false;
        private String proxyHost = null;
        private int proxyPort;
        private String proxyUsername = null;
        private String proxyPassword = null;
        private boolean initialized = false;
    
        public static HttpInvoker getInstance() {
            return httpInvoker;
        }
    
        private HttpInvoker() {
            client = new HttpClient(new MultiThreadedHttpConnectionManager());
            client.getParams().setParameter("http.protocol.content-charset", "gbk");
            client.getParams().setContentCharset("gbk");
            client.getParams().setSoTimeout(timeout);
        }
    
        public HttpInvoker(String charset, int timeout, boolean useProxy,
            String proxyHost, int proxyPort, String proxyUsername,
            String proxyPassword) {
            client = new HttpClient(new MultiThreadedHttpConnectionManager());
            if (charset != null && !charset.trim().equals("")) {
                this.charset = charset;
            }
            if (timeout > 0) {
                this.timeout = timeout;
            }
            client.getParams().setParameter("http.protocol.content-charset", charset);
            client.getParams().setContentCharset(charset);
            client.getParams().setSoTimeout(timeout);
            if (useProxy && proxyHost != null &&
                !proxyHost.trim().equals("") && proxyPort > 0) {
                HostConfiguration hc = new HostConfiguration();
                hc.setProxy(proxyHost, proxyPort);
                client.setHostConfiguration(hc);
                if (proxyUsername != null && !proxyUsername.trim().equals("") &&
                    proxyPassword != null && !proxyPassword.trim().equals("")) {
                    client.getState().setProxyCredentials(AuthScope.ANY,
                        new UsernamePasswordCredentials(proxyUsername, proxyPassword));
                }
            }
            initialized = true;
            logger.debug("HttpInvoker初始化完成");
        }
    
        public synchronized void init() {
            if (charset != null && !charset.trim().equals("")) {
                client.getParams().setParameter("http.protocol.content-charset", charset);
                client.getParams().setContentCharset(charset);
            }
            if (timeout > 0) {
                client.getParams().setSoTimeout(timeout);
            }
            if (useProxy && proxyHost != null &&
                !proxyHost.trim().equals("") && proxyPort > 0) {
                HostConfiguration hc = new HostConfiguration();
                hc.setProxy(proxyHost, proxyPort);
                client.setHostConfiguration(hc);
                if (proxyUsername != null && !proxyUsername.trim().equals("") &&
                    proxyPassword != null && !proxyPassword.trim().equals("")) {
                    client.getState().setProxyCredentials(AuthScope.ANY,
                        new UsernamePasswordCredentials(proxyUsername, proxyPassword));
                }
            }
            initialized = true;
            logger.debug("HttpInvoker初始化完成");
        }
    
        public String invoke(String url)throws Exception {
            return invoke(url, null, false);
        }
    
        public String invoke(String url, Map params, boolean isPost)throws Exception {
            logger.debug("HTTP调用[" + (isPost ? "POST" : "GET") + "][" + url + "][" + params + "]");
            HttpMethod httpMethod = null;
            String result = "";
            try {
                if (isPost && params != null && params.size() > 0) {
                    Iterator paramKeys = params.keySet().iterator();
                    httpMethod = new PostMethod(url);
                    NameValuePair[]form = new NameValuePair[params.size()];
                    int formIndex = 0;
                    while (paramKeys.hasNext()) {
                        String key = (String)paramKeys.next();
                        Object value = params.get(key);
                        if (value != null && value instanceof String && !value.equals("")) {
                            form[formIndex] = new NameValuePair(key, (String)value);
                            formIndex++;
                        } else if (value != null && value instanceof String[] &&
                            ((String[])value).length > 0) {
                            NameValuePair[]tempForm =
                                new NameValuePair[form.length + ((String[])value).length - 1];
                            for (int i = 0; i < formIndex; i++) {
                                tempForm[i] = form[i];
                            }
                            form = tempForm;
                            for (String v : (String[])value) {
                                form[formIndex] = new NameValuePair(key, (String)v);
                                formIndex++;
                            }
                        }
                    }
                    ((PostMethod)httpMethod).setRequestBody(form);
                } else {
                    if (params != null && params.size() > 0) {
                        Iterator paramKeys = params.keySet().iterator();
                        StringBuffer getUrl = new StringBuffer(url.trim());
                        if (url.trim().indexOf("?") > -1) {
                            if (url.trim().indexOf("?") < url.trim().length() - 1 &&
                                url.trim().indexOf("&") < url.trim().length() - 1) {
                                getUrl.append("&");
                            }
                        } else {
                            getUrl.append("?");
                        }
                        while (paramKeys.hasNext()) {
                            String key = (String)paramKeys.next();
                            Object value = params.get(key);
                            if (value != null && value instanceof String && !value.equals("")) {
                                getUrl.append(key).append("=").append(value).append("&");
                            } else if (value != null && value instanceof String[] &&
                                ((String[])value).length > 0) {
                                for (String v : (String[])value) {
                                    getUrl.append(key).append("=").append(v).append("&");
                                }
                            }
                        }
                        if (getUrl.lastIndexOf("&") == getUrl.length() - 1) {
                            httpMethod = new GetMethod(getUrl.substring(0, getUrl.length() - 1));
                        } else {
                            httpMethod = new GetMethod(getUrl.toString());
                        }
                    } else {
                        httpMethod = new GetMethod(url);
                    }
                }
                client.executeMethod(httpMethod);
                // result = httpMethod.getResponseBodyAsString();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                            httpMethod.getResponseBodyAsStream(), "ISO-8859-1"));
                String line = null;
                String html = null;
                while ((line = reader.readLine()) != null) {
                    if (html == null) {
                        html = "";
                    } else {
                        html += "\r\n";
                    }
                    html += line;
                }
                if (html != null) {
                    result = new String(html.getBytes("ISO-8859-1"), charset);
                }
            } catch (SocketTimeoutException e) {
                logger.error("连接超时[" + url + "]");
                throw e;
            }
            catch (java.net.ConnectException e) {
                logger.error("连接失败[" + url + "]");
                throw e;
            }
            catch (Exception e) {
                logger.error("连接时出现异常[" + url + "]");
                throw e;
            }
            finally {
                if (httpMethod != null) {
                    try {
                        httpMethod.releaseConnection();
                    } catch (Exception e) {
                        logger.error("释放网络连接失败[" + url + "]");
                        throw e;
                    }
                }
            }
    
            return result;
        }
    
        public void setCharset(String charset) {
            this.charset = charset;
        }
    
        public void setTimeout(int timeout) {
            this.timeout = timeout;
        }
    
        public void setProxyHost(String proxyHost) {
            this.proxyHost = proxyHost;
        }
    
        public void setProxyPort(int proxyPort) {
            this.proxyPort = proxyPort;
        }
    
        public void setProxyUsername(String proxyUsername) {
            this.proxyUsername = proxyUsername;
        }
    
        public void setProxyPassword(String proxyPassword) {
            this.proxyPassword = proxyPassword;
        }
    
        public void setUseProxy(boolean useProxy) {
            this.useProxy = useProxy;
        }
    
        public synchronized boolean isInitialized() {
            return initialized;
        }
    }

    使用方式:post

    Map<String,String> params = new HashMap<String,String>();
    params.put("check", check);
    String result = httpInvoker.invoke( "someURL", params, true);

    使用方式:get

    String content  = httpInvoker.invoke(url);
  • 相关阅读:
    如何重启apache2服务
    ubuntu设置不睡眠的方法
    linux环境下安装varnish
    PHP 开发者该知道的 5 个 Composer 小技巧
    dl, dt, dd /line-height /loat /vertical-align 问题
    针对老式浏览器(主要是IE6、7、8)的css3-mediaqueries.js自适应布局
    三栏网页宽度自适应布局方法
    vue.js开发环境搭建
    vue.js之个人总结
    less学习:基础语法总结
  • 原文地址:https://www.cnblogs.com/jack87224088/p/7515257.html
Copyright © 2011-2022 走看看