⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpclient.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: HttpClient.java 6532 2006-01-20 06:44:07Z jonesde $ * *  Copyright (c) 2001-2005 The Open For Business Project - www.ofbiz.org * *  Permission is hereby granted, free of charge, to any person obtaining a *  copy of this software and associated documentation files (the "Software"), *  to deal in the Software without restriction, including without limitation *  the rights to use, copy, modify, merge, publish, distribute, sublicense, *  and/or sell copies of the Software, and to permit persons to whom the *  Software is furnished to do so, subject to the following conditions: * *  The above copyright notice and this permission notice shall be included *  in all copies or substantial portions of the Software. * *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT *  OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *  THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.base.util;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;/** * Send HTTP GET/POST requests. * * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version    $Rev: 6532 $ * @since      2.0 */public class HttpClient {        public static final String module = HttpClient.class.getName();        private int timeout = 30000;    private boolean debug = false;    private boolean lineFeed = true;    private boolean followRedirects = true;        private String url = null;    private String rawStream = null;    private String clientCertAlias = null;    private Map parameters = null;    private Map headers = null;        private URL requestUrl = null;    private URLConnection con = null;    /** Creates an empty HttpClient object. */    public HttpClient() {}    /** Creates a new HttpClient object. */    public HttpClient(URL url) {        this.url = url.toExternalForm();    }    /** Creates a new HttpClient object. */    public HttpClient(String url) {        this.url = url;    }    /** Creates a new HttpClient object. */    public HttpClient(String url, Map parameters) {        this.url = url;        this.parameters = parameters;          }    /** Creates a new HttpClient object. */    public HttpClient(URL url, Map parameters) {        this.url = url.toExternalForm();        this.parameters = parameters;    }    /** Creates a new HttpClient object. */    public HttpClient(String url, Map parameters, Map headers) {        this.url = url;        this.parameters = parameters;        this.headers = headers;    }    /** Creates a new HttpClient object. */    public HttpClient(URL url, Map parameters, Map headers) {        this.url = url.toExternalForm();        this.parameters = parameters;        this.headers = headers;    }    /** When true overrides Debug.verboseOn() and forces debugging for this instance */    public void setDebug(boolean debug) {        this.debug = debug;    }    /** Sets the timeout for waiting for the connection (default 30sec) */    public void setTimeout(int timeout) {        this.timeout = timeout;    }        /** Enables this request to follow redirect 3xx codes (default true) */     public void followRedirects(boolean followRedirects) {        this.followRedirects = followRedirects;    }        /** Turns on or off line feeds in the request. (default is on) */    public void setLineFeed(boolean lineFeed) {        this.lineFeed = lineFeed;    }        /** Set the raw stream for posts. */    public void setRawStream(String stream) {        this.rawStream = stream;    }        /** Set the URL for this request. */    public void setUrl(URL url) {        this.url = url.toExternalForm();    }    /** Set the URL for this request. */    public void setUrl(String url) {        this.url = url;    }    /** Set the parameters for this request. */    public void setParameters(Map parameters) {        this.parameters = parameters;    }    /** Set an individual parameter for this request. */    public void setParameter(String name, String value) {        if (parameters == null)            parameters = new HashMap();        parameters.put(name, value);    }    /** Set the headers for this request. */    public void setHeaders(Map headers) {        this.headers = headers;    }    /** Set an individual header for this request. */    public void setHeader(String name, String value) {        if (headers == null)            headers = new HashMap();        headers.put(name, value);    }    /** Return a Map of headers. */    public Map getHeaders() {        return headers;    }    /** Return a Map of parameters. */    public Map getParameters() {        return parameters;    }    /** Return a string representing the requested URL. */    public String getUrl() {        return url;    }        /** Sets the client certificate alias (from the keystore) to use for this SSL connection. */    public void setClientCertificateAlias(String alias) {        this.clientCertAlias = alias;    }        /** Returns the alias of the client certificate to be used for this SSL connection. */    public String getClientCertificateAlias() {        return this.clientCertAlias;    }    /** Invoke HTTP request GET. */    public String get() throws HttpClientException {        return sendHttpRequest("get");    }    /** Invoke HTTP request GET. */    public InputStream getStream() throws HttpClientException {        return sendHttpRequestStream("get");    }    /** Invoke HTTP request POST. */    public String post() throws HttpClientException {        return sendHttpRequest("post");    }        /** Invoke HTTP request POST and pass raw stream. */    public String post(String stream) throws HttpClientException {        this.rawStream = stream;        return sendHttpRequest("post");    }    /** Invoke HTTP request POST. */    public InputStream postStream() throws HttpClientException {        return sendHttpRequestStream("post");    }    /** Returns the value of the specified named response header field. */    public String getResponseHeader(String header) throws HttpClientException {        if (con == null) {            throw new HttpClientException("Connection not yet established");        }        return con.getHeaderField(header);    }    /** Returns the key for the nth response header field. */    public String getResponseHeaderFieldKey(int n) throws HttpClientException {        if (con == null) {            throw new HttpClientException("Connection not yet established");        }        return con.getHeaderFieldKey(n);    }    /** Returns the value for the nth response header field. It returns null of there are fewer then n fields. */    public String getResponseHeaderField(int n) throws HttpClientException {        if (con == null) {            throw new HttpClientException("Connection not yet established");        }        return con.getHeaderField(n);    }    /** Returns the content of the response. */    public Object getResponseContent() throws java.io.IOException, HttpClientException {        if (con == null) {            throw new HttpClientException("Connection not yet established");        }        return con.getContent();    }    /** Returns the content-type of the response. */    public String getResponseContentType() throws HttpClientException {        if (con == null) {            throw new HttpClientException("Connection not yet established");        }        return con.getContentType();    }    /** Returns the content length of the response */    public int getResponseContentLength() throws HttpClientException {        if (con == null) {            throw new HttpClientException("Connection not yet established");        }        return con.getContentLength();    }    /** Returns the content encoding of the response. */    public String getResponseContentEncoding() throws HttpClientException {        if (con == null) {            throw new HttpClientException("Connection not yet established");        }        return con.getContentEncoding();    }    private String sendHttpRequest(String method) throws HttpClientException {        InputStream in = sendHttpRequestStream(method);        if (in == null) return null;        StringBuffer buf = new StringBuffer();        try {            if (Debug.verboseOn() || debug) {                try {                    Debug.log("ContentEncoding: " + con.getContentEncoding() + "; ContentType: " +                            con.getContentType() + " or: " + URLConnection.guessContentTypeFromStream(in), module);                                            } catch (IOException ioe) {                    Debug.logWarning(ioe, "Caught exception printing content debugging information", module);                }            }                        String charset = null;            String contentType = con.getContentType();            if (contentType == null) {                                try {                                     contentType = URLConnection.guessContentTypeFromStream(in);                } catch (IOException ioe) {                    Debug.logWarning(ioe, "Problems guessing content type from steam", module);                }            }                        if (Debug.verboseOn() || debug) Debug.log("Content-Type: " + contentType, module);                        if (contentType != null) {                contentType = contentType.toUpperCase();                int charsetEqualsLoc = contentType.indexOf("=", contentType.indexOf("CHARSET"));                int afterSemiColon = contentType.indexOf(";", charsetEqualsLoc);                if (charsetEqualsLoc >= 0 && afterSemiColon >= 0) {                    charset = contentType.substring(charsetEqualsLoc + 1, afterSemiColon);                } else if (charsetEqualsLoc >= 0) {                    charset = contentType.substring(charsetEqualsLoc + 1);                }                                if (charset != null) charset = charset.trim();                if (Debug.verboseOn() || debug) Debug.log("Getting text from HttpClient with charset: " + charset, module);            }                        BufferedReader post = new BufferedReader(charset == null ? new InputStreamReader(in) : new InputStreamReader(in, charset));            String line = new String();            if (Debug.verboseOn() || debug) Debug.log("---- HttpClient Response Content ----", module);            while ((line = post.readLine()) != null) {                if (Debug.verboseOn() || debug) Debug.log("[HttpClient] : " + line, module);                buf.append(line);                if (lineFeed) {                    buf.append("\n");                }            }        } catch (Exception e) {            throw new HttpClientException("Error processing input stream", e);        }        return buf.toString();    }    private InputStream sendHttpRequestStream(String method) throws HttpClientException {                        // setup some SSL variables        SSLUtil.loadJsseProperties();                    String arguments = null;        InputStream in = null;                             if (url == null) {            throw new HttpClientException("Cannot process a null URL.");        }        if (rawStream != null) {            arguments = rawStream;        } else if (parameters != null && parameters.size() > 0) {            arguments = UtilHttp.urlEncodeArgs(parameters, false);        }        // Append the arguments to the query string if GET.        if (method.equalsIgnoreCase("get") && arguments != null) {            url = url + "?" + arguments;        }        // Create the URL and open the connection.        try {            requestUrl = new URL(url);            con = URLConnector.openConnection(requestUrl, timeout, clientCertAlias);            if (Debug.verboseOn() || debug) Debug.log("Connection opened to : " + requestUrl.toExternalForm(), module);            if ((con instanceof HttpURLConnection)) {                ((HttpURLConnection) con).setInstanceFollowRedirects(followRedirects);                if (Debug.verboseOn() || debug) Debug.log("Connection is of type HttpURLConnection", module);            }            con.setDoOutput(true);            con.setUseCaches(false);            if (Debug.verboseOn() || debug) Debug.log("Do Input = true / Use Caches = false", module);            if (method.equalsIgnoreCase("post")) {                con.setRequestProperty("Content-type", "application/x-www-form-urlencoded");                con.setDoInput(true);                if (Debug.verboseOn() || debug) Debug.log("Set content type to : application/x-www-form-urlencoded", module);            }            if (headers != null && headers.size() > 0) {                Set headerSet = headers.keySet();                Iterator i = headerSet.iterator();                while (i.hasNext()) {                    String headerName = (String) i.next();                    String headerValue = (String) headers.get(headerName);                    con.setRequestProperty(headerName, headerValue);                    if (Debug.verboseOn() || debug) Debug.log("Header : " + headerName + " -> " + headerValue, module);                }            } else {                if (Debug.verboseOn() || debug) Debug.log("No headers to set", module);            }            if (method.equalsIgnoreCase("post")) {                DataOutputStream out = new DataOutputStream(con.getOutputStream());                if (Debug.verboseOn() || debug) Debug.log("Opened output stream", module);                out.writeBytes(arguments);                if (Debug.verboseOn() || debug) Debug.log("Wrote arguements (parameters) : " + arguments, module);                out.flush();                out.close();                if (Debug.verboseOn() || debug) Debug.log("Flushed and closed buffer", module);            }            if (Debug.verboseOn() || debug) {                Map headerFields = con.getHeaderFields();                Debug.log("Header Fields : " + headerFields, module);            }            in = con.getInputStream();        } catch (IOException ioe) {            throw new HttpClientException("IO Error processing request", ioe);        } catch (Exception e) {            throw new HttpClientException("Error processing request", e);        }        return in;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -