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

📄 httpproxyrequest.java

📁 mina是以Java实现的一个开源的网络程序框架
💻 JAVA
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one *  or more contributor license agreements.  See the NOTICE file *  distributed with this work for additional information *  regarding copyright ownership.  The ASF licenses this file *  to you under the Apache License, Version 2.0 (the *  "License"); you may not use this file except in compliance *  with the License.  You may obtain a copy of the License at * *    http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, *  software distributed under the License is distributed on an *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *  KIND, either express or implied.  See the License for the *  specific language governing permissions and limitations *  under the License. * */package org.apache.mina.proxy.handlers.http;import java.net.InetSocketAddress;import java.net.MalformedURLException;import java.net.URL;import java.util.List;import java.util.Map;import org.apache.mina.proxy.ProxyAuthException;import org.apache.mina.proxy.handlers.ProxyRequest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * HttpProxyRequest.java - Wrapper class for HTTP requests. *  * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 759731 $, $Date: 2009-03-29 19:52:41 +0200 (Sun, 29 Mar 2009) $ * @since MINA 2.0.0-M3 */public class HttpProxyRequest extends ProxyRequest {    private final static Logger logger = LoggerFactory            .getLogger(HttpProxyRequest.class);    /**     * The HTTP verb.     */    public final String httpVerb;    /**     * The HTTP URI.     */    public final String httpURI;    /**     * The HTTP protocol version.     */    private String httpVersion;    /**     * The target hostname.     */    private String host;    /**     * The request headers.     */    private Map<String, List<String>> headers;    /**     * The additionnal properties supplied to use with the proxy for      * authentication for example.      */    private transient Map<String, String> properties;    /**     * Constructor which creates a HTTP/1.0 CONNECT request to the specified      * endpoint.     *       * @param endpointAddress the endpoint to connect to     */    public HttpProxyRequest(final InetSocketAddress endpointAddress) {        this(endpointAddress, HttpProxyConstants.HTTP_1_0, null);    }    /**     * Constructor which creates a CONNECT request to the specified endpoint     * using the provided protocol version.     *       * @param endpointAddress the endpoint to connect to     * @param httpVersion the HTTP protocol version     */        public HttpProxyRequest(final InetSocketAddress endpointAddress,            final String httpVersion) {        this(endpointAddress, httpVersion, null);    }    /**     * Constructor which creates a CONNECT request to the specified endpoint     * using the provided protocol version and setting the requested headers.     *       * @param endpointAddress the endpoint to connect to     * @param httpVersion the HTTP protocol version     * @param headers the additionnal http headers     */        public HttpProxyRequest(final InetSocketAddress endpointAddress,            final String httpVersion, final Map<String, List<String>> headers) {    	this.httpVerb = HttpProxyConstants.CONNECT;        if (!endpointAddress.isUnresolved()) {        	this.httpURI = endpointAddress.getHostName() + ":"            				+ endpointAddress.getPort();        } else {        	this.httpURI = endpointAddress.getAddress().getHostAddress() + ":"							+ endpointAddress.getPort();        }                this.httpVersion = httpVersion;        this.headers = headers;    }    /**     * Constructor which creates a HTTP/1.0 GET request to the specified      * http URI.     *       * @param httpURI the target URI     */        public HttpProxyRequest(final String httpURI) {        this(HttpProxyConstants.GET, httpURI, HttpProxyConstants.HTTP_1_0, null);    }    /**     * Constructor which creates a GET request to the specified http URI     * using the provided protocol version     *       * @param httpURI the target URI     * @param httpVersion the HTTP protocol version     */            public HttpProxyRequest(final String httpURI, final String httpVersion) {        this(HttpProxyConstants.GET, httpURI, httpVersion, null);    }    /**     * Constructor which creates a request using the provided HTTP verb targeted at     * the specified http URI using the provided protocol version.     *      * @param httpVerb the HTTP verb to use      * @param httpURI the target URI     * @param httpVersion the HTTP protocol version     */            public HttpProxyRequest(final String httpVerb, final String httpURI,            final String httpVersion) {        this(httpVerb, httpURI, httpVersion, null);    }    /**     * Constructor which creates a request using the provided HTTP verb targeted at     * the specified http URI using the provided protocol version and setting the      * requested headers.     *      * @param httpVerb the HTTP verb to use      * @param httpURI the target URI     * @param httpVersion the HTTP protocol version     * @param headers the additional http headers     */    public HttpProxyRequest(final String httpVerb, final String httpURI,            final String httpVersion, final Map<String, List<String>> headers) {        this.httpVerb = httpVerb;        this.httpURI = httpURI;        this.httpVersion = httpVersion;        this.headers = headers;    }    /**     * Returns the HTTP request verb.     */    public final String getHttpVerb() {        return httpVerb;    }    /**     * Returns the HTTP version.     */    public String getHttpVersion() {        return httpVersion;    }    /**     * Sets the HTTP version.     *      * @param httpVersion the HTTP protocol version     */    public void setHttpVersion(String httpVersion) {        this.httpVersion = httpVersion;    }    /**     * Returns the host to which we are connecting.     */    public synchronized final String getHost() {        if (host == null) {            if (getEndpointAddress() != null &&             		!getEndpointAddress().isUnresolved()) {                host = getEndpointAddress().getHostName();            }            if (host == null && httpURI != null) {                try {                    host = (new URL(httpURI)).getHost();                } catch (MalformedURLException e) {                    logger.debug("Malformed URL", e);                }            }        }        return host;    }    /**     * Returns the request HTTP URI.     */    public final String getHttpURI() {        return httpURI;    }    /**     * Returns the HTTP headers.     */    public final Map<String, List<String>> getHeaders() {        return headers;    }    /**     * Set the HTTP headers.     */    public final void setHeaders(Map<String, List<String>> headers) {        this.headers = headers;    }    /**     * Returns additional properties for the request.     */    public Map<String, String> getProperties() {        return properties;    }    /**     * Set additional properties for the request.     */    public void setProperties(Map<String, String> properties) {        this.properties = properties;    }    /**     * Check if the given property(ies) is(are) set. Otherwise throws a      * {@link ProxyAuthException}.     */    public void checkRequiredProperties(String... propNames) throws ProxyAuthException {		StringBuilder sb = new StringBuilder();    	for (String propertyName : propNames) {	        if (properties.get(propertyName) == null) {	        		        	sb.append(propertyName).append(' ');	        }    	}        if (sb.length() > 0) {        	sb.append("property(ies) missing in request");        	throw new ProxyAuthException(sb.toString());        }    }        /**     * Returns the string representation of the HTTP request .     */    public String toHttpString() {        StringBuilder sb = new StringBuilder();        sb.append(getHttpVerb()).append(' ').append(getHttpURI()).append(' ')                .append(getHttpVersion()).append(HttpProxyConstants.CRLF);        boolean hostHeaderFound = false;        if (getHeaders() != null) {            for (Map.Entry<String, List<String>> header : getHeaders()                    .entrySet()) {                if (!hostHeaderFound) {                    hostHeaderFound = header.getKey().equalsIgnoreCase("host");                }                for (String value : header.getValue()) {                    sb.append(header.getKey()).append(": ").append(value)                            .append(HttpProxyConstants.CRLF);                }            }            if (!hostHeaderFound                    && getHttpVersion() == HttpProxyConstants.HTTP_1_1) {                sb.append("Host: ").append(getHost()).append(                        HttpProxyConstants.CRLF);            }        }        sb.append(HttpProxyConstants.CRLF);        return sb.toString();    }}

⌨️ 快捷键说明

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