httpurlconnection.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 618 行 · 第 1/2 页

JAVA
618
字号
/* * Copyright  1990-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER   *    * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License version   * 2 only, as published by the Free Software Foundation.    *    * This program is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   * General Public License version 2 for more details (a copy is   * included at /legal/license.txt).    *    * You should have received a copy of the GNU General Public License   * version 2 along with this work; if not, write to the Free Software   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA   * 02110-1301 USA    *    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa   * Clara, CA 95054 or visit www.sun.com if you need additional   * information or have any questions.  * */package java.net;import java.io.InputStream;import java.io.IOException;import java.security.Permission;import java.text.DateFormat;import java.text.SimpleDateFormat;/** * A URLConnection with support for HTTP-specific features. See * <A HREF="http://www.w3.org/pub/WWW/Protocols/"> the spec </A> for * details. * <p> *  * Each HttpURLConnection instance is used to make a single request   * but the underlying network connection to the HTTP server may be * transparently shared by other instances. Calling the close() methods * on the InputStream or OutputStream of an HttpURLConnection * after a request may free network resources associated with this * instance but has no effect on any shared persistent connection. * Calling the disconnect() method may close the underlying socket * if a persistent connection is otherwise idle at that time. *  * @see     java.net.HttpURLConnection#disconnect() * @since JDK1.1 */abstract public class HttpURLConnection extends URLConnection {    /* instance variables */    /**     * The HTTP method (GET,POST,PUT,etc.).      */    protected String method = "GET";    /**     * Returns the key for the <code>n</code><sup>th</sup> header field.     * Some implementations may treat the <code>0</code><sup>th</sup>      * header field as special, i.e. as the status line returned by the HTTP     * server. In this case, {@link #getHeaderField(int) getHeaderField(0)} returns the status      * line, but <code>getHeaderFieldKey(0)</code> returns null.     *     * @param   n   an index, where n >=0.     * @return  the key for the <code>n</code><sup>th</sup> header field,     *          or <code>null</code> if the key does not exist.     */    public String getHeaderFieldKey (int n) {	return null;    }    /**     * Returns the value for the <code>n</code><sup>th</sup> header field.      * Some implementations may treat the <code>0</code><sup>th</sup>      * header field as special, i.e. as the status line returned by the HTTP     * server.      * <p>     * This method can be used in conjunction with the      * {@link #getHeaderFieldKey getHeaderFieldKey} method to iterate through all      * the headers in the message.      *     * @param   n   an index, where n>=0.     * @return  the value of the <code>n</code><sup>th</sup> header field,     *		or <code>null</code> if the value does not exist.     * @see     java.net.HttpURLConnection#getHeaderFieldKey(int)     */    public String getHeaderField(int n) {	return null;    }    /**     * An <code>int</code> representing the three digit HTTP Status-Code.     * <ul>     * <li> 1xx: Informational     * <li> 2xx: Success     * <li> 3xx: Redirection     * <li> 4xx: Client Error     * <li> 5xx: Server Error     * </ul>     */    protected int responseCode = -1;    /**     * The HTTP response message.     */    protected String responseMessage = null;    /* static variables */    /* do we automatically follow redirects? The default is true. */    private static boolean followRedirects = true;    /**     * If <code>true</code>, the protocol will automatically follow redirects.     * If <code>false</code>, the protocol will not automatically follow      * redirects.     * <p>     * This field is set by the <code>setInstanceFollowRedirects</code>      * method. Its value is returned by the <code>getInstanceFollowRedirects</code>      * method.     * <p>     * Its default value is based on the value of the static followRedirects      * at HttpURLConnection construction time.     *     * @see     java.net.HttpURLConnection#setInstanceFollowRedirects(boolean)     * @see     java.net.HttpURLConnection#getInstanceFollowRedirects()     * @see     java.net.HttpURLConnection#setFollowRedirects(boolean)     */    protected boolean instanceFollowRedirects = followRedirects;    /* valid HTTP methods */    private static final String[] methods = {	"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"    };    /**     * Constructor for the HttpURLConnection.     * @param u the URL     */    protected HttpURLConnection (URL u) {	super(u);    }        /**     * Sets whether HTTP redirects  (requests with response code 3xx) should      * be automatically followed by this class.  True by default.  Applets     * cannot change this variable.     * <p>     * If there is a security manager, this method first calls     * the security manager's <code>checkSetFactory</code> method      * to ensure the operation is allowed.      * This could result in a SecurityException.     *      * @param set a <code>boolean</code> indicating whether or not     * to follow HTTP redirects.     * @exception  SecurityException  if a security manager exists and its       *             <code>checkSetFactory</code> method doesn't      *             allow the operation.     * @see        SecurityManager#checkSetFactory     * @see #getFollowRedirects()     */    public static void setFollowRedirects(boolean set) {	SecurityManager sec = System.getSecurityManager();	if (sec != null) {	    // seems to be the best check here...	    sec.checkSetFactory();	}	followRedirects = set;    }    /**     * Returns a <code>boolean</code> indicating     * whether or not HTTP redirects (3xx) should     * be automatically followed.     *     * @return <code>true</code> if HTTP redirects should     * be automatically followed, <tt>false</tt> if not.     * @see #setFollowRedirects(boolean)     */    public static boolean getFollowRedirects() {	return followRedirects;    }    /**     * Sets whether HTTP redirects (requests with response code 3xx) should     * be automatically followed by this <code>HttpURLConnection</code>      * instance.     * <p>     * The default value comes from followRedirects, which defaults to     * true.     *     * @param followRedirects a <code>boolean</code> indicating      * whether or not to follow HTTP redirects.     *     * @see    java.net.HttpURLConnection#instanceFollowRedirects     * @see #getInstanceFollowRedirects     */     public void setInstanceFollowRedirects(boolean followRedirects) { 	instanceFollowRedirects = followRedirects;     }     /**     * Returns the value of this <code>HttpURLConnection</code>'s     * <code>instanceFollowRedirects</code> field.     *     * @return  the value of this <code>HttpURLConnection</code>'s     *          <code>instanceFollowRedirects</code> field.     * @see     java.net.HttpURLConnection#instanceFollowRedirects     * @see #setInstanceFollowRedirects(boolean)     */     public boolean getInstanceFollowRedirects() {         return instanceFollowRedirects;     }    /**     * Set the method for the URL request, one of:     * <UL>     *  <LI>GET     *  <LI>POST     *  <LI>HEAD     *  <LI>OPTIONS     *  <LI>PUT     *  <LI>DELETE     *  <LI>TRACE     * </UL> are legal, subject to protocol restrictions.  The default     * method is GET.     *      * @param method the HTTP method     * @exception ProtocolException if the method cannot be reset or if     *              the requested method isn't valid for HTTP.     * @see #getRequestMethod()     */    public void setRequestMethod(String method) throws ProtocolException {	if (connected) {	    throw new ProtocolException("Can't reset method: already connected");	}	// This restriction will prevent people from using this class to 	// experiment w/ new HTTP methods using java.  But it should 	// be placed for security - the request String could be	// arbitrarily long.	for (int i = 0; i < methods.length; i++) {	    if (methods[i].equals(method)) {		this.method = method;		return;	    }	}	throw new ProtocolException("Invalid HTTP method: " + method);    }    /**     * Get the request method.     * @return the HTTP request method     * @see #setRequestMethod(java.lang.String)     */    public String getRequestMethod() {	return method;    }        /**     * Gets the status code from an HTTP response message.     * For example, in the case of the following status lines:     * <PRE>     * HTTP/1.0 200 OK     * HTTP/1.0 401 Unauthorized     * </PRE>     * It will return 200 and 401 respectively.     * Returns -1 if no code can be discerned     * from the response (i.e., the response is not valid HTTP).     * @throws IOException if an error occurred connecting to the server.     * @return the HTTP Status-Code, or -1     */    public int getResponseCode() throws IOException {	/*	 * We're got the response code already	 */	if (responseCode != -1) {	    return responseCode;	}	/*	 * Ensure that we have connected to the server. Record	 * exception as we need to re-throw it if there isn't	 * a status line.	 */	Exception exc = null;	try {            getInputStream();	} catch (Exception e) {	    exc = e;	}	/* 	 * If we can't a status-line then re-throw any exception	 * that getInputStream threw.	 */	String statusLine = getHeaderField(0);	if (statusLine == null) {	    if (exc != null) {		if (exc instanceof RuntimeException)                    throw (RuntimeException)exc;                else                    throw (IOException)exc;	    }	    return -1;	}

⌨️ 快捷键说明

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