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

📄 httpurlconnection.java

📁 java http客户端相应源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * @return the header name, or null if not that many headers.     */    public String getHeaderFieldKey(int n)    {	if (hdr_keys == null)	    fill_hdr_arrays();	if (n >= 0  &&  n < hdr_keys.length)	    return hdr_keys[n];	else	    return null;    }    /**     * Gets header value of the n-th header. Calls connect() if not connected.     * The value of 0-th header is the Status-Line (e.g. "HTTP/1.1 200 Ok").     *     * @param n which header to return.     * @return the header value, or null if not that many headers.     */    public String getHeaderField(int n)    {	if (hdr_values == null)	    fill_hdr_arrays();	if (n >= 0  &&  n < hdr_values.length)	    return hdr_values[n];	else	    return null;    }    /**     * Cache the list of headers.     */    private void fill_hdr_arrays()    {	try	{	    if (!connected)  connect();	    // count number of headers	    int num = 1;	    Enumeration enum = resp.listHeaders();	    while (enum.hasMoreElements())	    {		num++;		enum.nextElement();	    }	    // allocate arrays	    hdr_keys   = new String[num];	    hdr_values = new String[num];	    // fill arrays	    enum = resp.listHeaders();	    for (int idx=1; idx<num; idx++)	    {		hdr_keys[idx]   = (String) enum.nextElement();		hdr_values[idx] = resp.getHeader(hdr_keys[idx]);	    }	    // the 0'th field is special	    hdr_values[0] = resp.getVersion() + " " + resp.getStatusCode() +			    " " + resp.getReasonLine();	}	catch (Exception e)	    { hdr_keys = hdr_values = new String[0]; }    }    /**     * Gets an input stream from which the data in the response may be read.     * Calls connect() if not connected.     *     * @return an InputStream     * @exception ProtocolException if input not enabled.     * @see java.net.URLConnection#setDoInput(boolean)     */    public InputStream getInputStream()  throws IOException    {	if (!doInput)	    throw new ProtocolException("Input not enabled! (use setDoInput(true))");	if (!connected)  connect();	InputStream stream;	try	{	    stream = resp.getInputStream();	    if (resp.pe != null  &&  resp.getHeader("Content-length") != null)	    {		try		    { stream = new sun.net.www.MeteredStream(stream, resp.pe); }		catch (Throwable t)		{		    Log.write(Log.URLC, "URLC:  (" + urlString +					") error trying to create metered stream: ", t);		}	    }	    else		// some things expect this stream to support mark/reset		stream = new BufferedInputStream(stream);	}	catch (ModuleException e)	    { throw new IOException(e.toString()); }	return stream;    }    /**     * Returns the error stream if the connection failed     * but the server sent useful data nonetheless.     *     * <P>This method will not cause a connection to be initiated.     *     * @return an InputStream, or null if either the connection hasn't     *         been established yet or no error occured     * @see java.net.HttpURLConnection#getErrorStream()     * @since V0.3-1     */    public InputStream getErrorStream()    {	try	{	    if (!doInput  ||  !connected  ||  resp.getStatusCode() < 300  ||		resp.getHeaderAsInt("Content-length") <= 0)		return null;	    return resp.getInputStream();	}	catch (Exception e)	    { return null; }    }    /**     * Gets an output stream which can be used send an entity with the     * request. Can be called multiple times, in which case always the     * same stream is returned.     *     * <P>The default request method changes to "POST" when this method is     * called. Cannot be called after connect().     *     * <P>If no Content-type has been set it defaults to     * <var>application/x-www-form-urlencoded</var>. Furthermore, if the     * Content-type is <var>application/x-www-form-urlencoded</var> then all     * output will be collected in a buffer before sending it to the server;     * otherwise an HttpOutputStream is used.     *     * @return an OutputStream     * @exception ProtocolException if already connect()'ed, if output is not     *                              enabled or if the request method does not     *                              support output.     * @see java.net.URLConnection#setDoOutput(boolean)     * @see HTTPClient.HttpOutputStream     */    public synchronized OutputStream getOutputStream()  throws IOException    {	if (connected)	    throw new ProtocolException("Already connected!");	if (!doOutput)	    throw new ProtocolException("Output not enabled! (use setDoOutput(true))");	if (!method_set)	    method = "POST";	else if (method.equals("HEAD")  ||  method.equals("GET")  ||		 method.equals("TRACE"))	    throw new ProtocolException("Method "+method+" does not support output!");	if (getRequestProperty("Content-type") == null)	    setRequestProperty("Content-type", "application/x-www-form-urlencoded");	if (output_stream == null)	{	    Log.write(Log.URLC, "URLC:  (" + urlString + ") creating output stream");	    String cl = getRequestProperty("Content-Length");	    if (cl != null)		output_stream = new HttpOutputStream(Integer.parseInt(cl.trim()));	    else	    {		// Hack: because of restrictions when using true output streams		// and because form-data is usually quite limited in size, we		// first collect all data before sending it if this is		// form-data.		if (getRequestProperty("Content-type").equals(			"application/x-www-form-urlencoded"))		    output_stream = new ByteArrayOutputStream(300);		else		    output_stream = new HttpOutputStream();	    }	    if (output_stream instanceof HttpOutputStream)		connect();	}	return output_stream;    }    /**     * Gets the url for this connection. If we're connect()'d and the request     * was redirected then the url returned is that of the final request.     *     * @return the final url, or null if any exception occured.     */    public URL getURL()    {	if (connected)	{	    try	    {		if (resp.getEffectiveURL() != null)		    return resp.getEffectiveURL();	    }	    catch (Exception e)		{ return null; }	}	return url;    }    /**     * Sets the <var>If-Modified-Since</var> header.     *     * @param time the number of milliseconds since 1970.     */    public void setIfModifiedSince(long time)    {	super.setIfModifiedSince(time);	setRequestProperty("If-Modified-Since", Util.httpDate(new Date(time)));    }    /**     * Sets an arbitrary request header.     *     * @param name  the name of the header.     * @param value the value for the header.     */    public void setRequestProperty(String name, String value)    {	Log.write(Log.URLC, "URLC:  (" + urlString + ") Setting request property: " +			    name + " : " + value);	int idx;	for (idx=0; idx<headers.length; idx++)	{	    if (headers[idx].getName().equalsIgnoreCase(name))		break;	}	if (idx == headers.length)	    headers = Util.resizeArray(headers, idx+1);	headers[idx] = new NVPair(name, value);    }    /**     * Gets the value of a given request header.     *     * @param name  the name of the header.     * @return the value part of the header, or null if no such header.     */    public String getRequestProperty(String name)    {	for (int idx=0; idx<headers.length; idx++)	{	    if (headers[idx].getName().equalsIgnoreCase(name))		return headers[idx].getValue();	}	return null;    }    /**     * Sets an arbitrary default request header. All headers set here are     * automatically sent with each request.     *     * @param name  the name of the header.     * @param value the value for the header.     */    public static void setDefaultRequestProperty(String name, String value)    {	Log.write(Log.URLC, "URLC:  Setting default request property: " +			    name + " : " + value);	int idx;	for (idx=0; idx<default_headers.length; idx++)	{	    if (default_headers[idx].getName().equalsIgnoreCase(name))		break;	}	if (idx == default_headers.length)	    default_headers = Util.resizeArray(default_headers, idx+1);	default_headers[idx] = new NVPair(name, value);    }    /**     * Gets the value for a given default request header.     *     * @param name  the name of the header.     * @return the value part of the header, or null if no such header.     */    public static String getDefaultRequestProperty(String name)    {	for (int idx=0; idx<default_headers.length; idx++)	{	    if (default_headers[idx].getName().equalsIgnoreCase(name))		return default_headers[idx].getValue();	}	return null;    }    /**     * Enables or disables the automatic handling of redirection responses     * for this instance only. Cannot be called after <code>connect()</code>.     *     * @param set enables automatic redirection handling if true.     */    public void setInstanceFollowRedirects(boolean set)    {	if (connected)	    throw new IllegalStateException("Already connected!");	do_redir = set;    }    /**     * @return true if automatic redirection handling for this instance is     *              enabled.     */    public boolean getInstanceFollowRedirects()    {	return do_redir;    }    /**     * Connects to the server (if connection not still kept alive) and     * issues the request.     */    public synchronized void connect()  throws IOException    {	if (connected)  return;	Log.write(Log.URLC, "URLC:  (" + urlString + ") Connecting ...");	// useCaches TBD!!!	synchronized(con)	{	    con.setAllowUserInteraction(allowUserInteraction);	    if (do_redir)		con.addModule(redir_mod, 2);	    else		con.removeModule(redir_mod);	    try	    {		if (output_stream instanceof ByteArrayOutputStream)		    resp = con.ExtensionMethod(method, resource,			((ByteArrayOutputStream) output_stream).toByteArray(),					     headers);		else		    resp = con.ExtensionMethod(method, resource,				    (HttpOutputStream) output_stream, headers);	    }	    catch (ModuleException e)		{ throw new IOException(e.toString()); }	}	connected = true;	try	    { resp.setProgressEntry(new sun.net.ProgressEntry(url.getFile(), null)); }	catch (Throwable t)	{	    Log.write(Log.URLC, "URLC:  (" + urlString +				") error trying to create and set progress entry: ", t);	}    }    /**     * Closes all the connections to this server.     */    public void disconnect()    {	Log.write(Log.URLC, "URLC:  (" + urlString + ") Disconnecting ...");	con.stop();	if (resp != null)	    resp.unsetProgressEntry();    }    public void finalize()    {	if (resp != null)	    resp.unsetProgressEntry();	super.finalize();    }    /**     * Shows if request are being made through an http proxy or directly.     *     * @return true if an http proxy is being used.     */    public boolean usingProxy()    {	return (con.getProxyHost() != null);    }    /**     * produces a string.     * @return a string containing the HttpURLConnection     */    public String toString()    {	return getClass().getName() + "[" + url + "]";    }}

⌨️ 快捷键说明

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