zoukankan      html  css  js  c++  java
  • Java HttpClient

     
    public class WebClient {
        
        public static final String POST_TYPE_JSON = "json";
        public static final String POST_TYPE_MULTI = "multi";
        public static final String POST_TYPE_NAME_VALUE = "name_value";
        private static final Pattern pageEncodingReg = Pattern.compile("content-type.*charset=([^">\\]+)", Pattern.CASE_INSENSITIVE);
        private static final Pattern headerEncodingReg = Pattern.compile("charset=(.+)", Pattern.CASE_INSENSITIVE);
       
        private DefaultHttpClient httpClient = new DefaultHttpClient();
        private String url;
        private HTTPMethod method;
        private Response response;
        private Map<String, String> headers = new HashMap<String, String>();
        private JSONObject parameters = new JSONObject();
        private List<FormBodyPart> multipartParameter = new ArrayList<FormBodyPart>();
        private String postType;
        
        private static final String UTF8 = "utf-8";
    
        public void setMethod(HTTPMethod method) {
            this.method = method;
        }
     
        public void setUrl(String url) {
            if (isStringEmpty(url)) {
                throw new RuntimeException("[Error] url is empty!");
            }
            this.url = url;
            headers.clear();
            parameters.clear();
            multipartParameter.clear();
            postType = null;
            response = null;
            
            if (url.startsWith("https://")) {
                enableSSL();
            } else {
                disableSSL();
            }
        }
     
        public Map<String, String> getRequestHeaders() {
            return headers;
        }
        
        public void setRequestHeaders(String key, String value){
            headers.put(key, value);
        }
     
        public void addParameter(String name, Object value){
            parameters.put(name, value);
        }
        
        public void setParameters(JSONObject json){
            parameters.clear();
            parameters.putAll(json);
        }
        
        public void setAjaxHeaders(){
            setRequestHeaders("Content-Type", "application/json");
        }
     
        public void setTimeout(int connectTimeout, int readTimeout) {
            HttpParams params = httpClient.getParams();
            HttpConnectionParams.setConnectionTimeout(params, connectTimeout);
            HttpConnectionParams.setSoTimeout(params, readTimeout);
        }
     
        
     
        public Response sendRequest() throws IOException {
            if (url == null || method == null) {
                throw new RuntimeException("Request exception: URL or Method is null");
            }
            
            httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
            HttpResponse resp = null;
            HttpUriRequest req = null;
            
            
            if (method.equals(HTTPMethod.GET)) {
                req = new HttpGet(url);
            }
            else if(method.equals(HTTPMethod.DELETE)){
                req = new HttpDelete(url);
            }
            else if(method.equals(HTTPMethod.PUT)){
                req = new HttpPut(url);
                if(parameters.size() > 0){
                    StringEntity entity = new StringEntity(new String(parameters.toString().getBytes("utf-8"), "ISO-8859-1"));
                    entity.setContentEncoding("UTF-8");
                    entity.setContentType("application/json");
                    ((HttpPut) req).setEntity(entity);
                }
            }
            else {
                req = new HttpPost(url);
               
                if(POST_TYPE_MULTI.equals(postType)  ){
                    MultipartEntity entity = new MultipartEntity();
                    for(FormBodyPart bodyPart : multipartParameter){
                        entity.addPart(bodyPart);
                    }
                    ((HttpPost) req).setEntity(entity);
                }
                else  if(parameters.size() > 0){
                    if(POST_TYPE_JSON.equals(postType)){
                        StringEntity entity = new StringEntity(new String(parameters.toString().getBytes("utf-8"), "ISO-8859-1"));
                        entity.setContentEncoding("UTF-8");
                        entity.setContentType("application/json");
                        ((HttpPost) req).setEntity(entity);
                    }
                    else{
                        Iterator<String> iterator = parameters.keys();
                        List<NameValuePair> postParameter = new ArrayList<NameValuePair>();
                        while(iterator.hasNext()){
                            String key = iterator.next();
                            postParameter.add(new BasicNameValuePair(key, parameters.getString(key)));
                        }
                        ((HttpPost) req).setEntity(new UrlEncodedFormEntity(postParameter, UTF8));
                    }
                }    
            }
            for (Entry<String, String> e : headers.entrySet()) {
                req.addHeader(e.getKey(), e.getValue());
            }
            req.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
            resp = httpClient.execute(req);
            Header[] header = resp.getAllHeaders();
            Map<String, String> responseHeaders = new HashMap<String, String>();
            for (Header h : header) {
                responseHeaders.put(h.getName(), h.getValue());
            }
            response = new Response();
            response.setCode(resp.getStatusLine().getStatusCode());
            response.setHeaders(responseHeaders);
            String content = getContent(EntityUtils.toByteArray(resp.getEntity()));
            response.setContent(content);
            return response;
        }
     
        private boolean isStringEmpty(String s) {
            return s == null || s.length() == 0;
        }
     
        private String getContent(byte[] bytes) throws IOException {
            if (bytes == null) {
                throw new RuntimeException("[Error] Can't fetch content!");
            }
            String headerContentType = null;
            if ((headerContentType = response.getHeaders().get("Content-Type")) != null) {
                Matcher m1 = headerEncodingReg.matcher(headerContentType);
                if (m1.find()) {
                    return new String(bytes, m1.group(1));
                }
            }
    
            String html = new String(bytes);
            Matcher m2 = pageEncodingReg.matcher(html);
            if (m2.find()) {
                html = new String(bytes, m2.group(1));
            }
            return html;
        }
     
        private void enableSSL() {
            try {
                SSLContext sslcontext = SSLContext.getInstance("TLS");
                sslcontext.init(null, new TrustManager[] { truseAllManager }, null);
                SSLSocketFactory sf = new SSLSocketFactory(sslcontext);
                sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
                Scheme https = new Scheme("https", sf, 443);
                httpClient.getConnectionManager().getSchemeRegistry().register(https);
            } catch (KeyManagementException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
     
        private void disableSSL() {
            SchemeRegistry reg = httpClient.getConnectionManager().getSchemeRegistry();
            if (reg.get("https") != null) {
                reg.unregister("https");
            }
        }
        
    
        public DefaultHttpClient getHttpClient() {
            return httpClient;
        }
     
        public enum HTTPMethod {
            GET, POST, DELETE, PUT
        }
     
        // SSL handler (ignore untrusted hosts)
        private static TrustManager truseAllManager = new X509TrustManager() {
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
     
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType)
                    throws CertificateException {
            }
     
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType)
                    throws CertificateException {
            }
        };
    
        public void setPostType(String postType) {
            this.postType = postType;
        }
    
        public void setMultipartParameter(List<FormBodyPart> multipartParameter) {
            this.multipartParameter.clear();
            this.multipartParameter.addAll(multipartParameter);
        }
    }
  • 相关阅读:
    《Android 编程权威指南》读书总结
    hadoop记录-浅析Hadoop中的DistCp和FastCopy(转载)
    Hadoop记录-queue使用率
    Hadoop记录-切换NN
    Hadoop记录-退役
    Hadoop记录-queue mysql
    Linux记录-grafana opentsdb安装
    Hadoop记录-JMX参数
    Linux记录-open-falcon开源监控系统部署
    Hadoop记录- Yarn Job MAX
  • 原文地址:https://www.cnblogs.com/rubekid/p/4742859.html
Copyright © 2011-2022 走看看