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 + -
显示快捷键?