/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.tgdb; /** * Get a web file. */ public class WebFile { // Saved response. private java.util.Map<String,java.util.List<String>> responseHeader = null; private java.net.URL responseURL = null; private int responseCode = -1; private String MIMEtype = null; private String charset = null; private Object content = null; /** Open a web file. */ public WebFile( String urlString ) throws java.net.MalformedURLException, java.io.IOException { // Open a URL connection. final java.net.URL url = new java.net.URL( urlString ); final java.net.URLConnection uconn = url.openConnection( ); if ( !(uconn instanceof java.net.HttpURLConnection) ) throw new java.lang.IllegalArgumentException( "URL protocol must be HTTP." ); final java.net.HttpURLConnection conn = (java.net.HttpURLConnection)uconn; // Set up a request. conn.setConnectTimeout( 10000 ); // 10 sec conn.setReadTimeout( 10000 ); // 10 sec conn.setInstanceFollowRedirects( true ); conn.setRequestProperty( "User-agent", "spider" ); // Send the request. conn.connect( ); // Get the response. responseHeader = conn.getHeaderFields( ); responseCode = conn.getResponseCode( ); responseURL = conn.getURL( ); final int length = conn.getContentLength( ); final String type = conn.getContentType( ); if ( type != null ) { final String[] parts = type.split( ";" ); MIMEtype = parts[0].trim( ); for ( int i = 1; i < parts.length && charset == null; i++ ) { final String t = parts[i].trim( ); final int index = t.toLowerCase( ).indexOf( "charset=" ); if ( index != -1 ) charset = t.substring( index+8 ); } } // Get the content. final java.io.InputStream stream = conn.getErrorStream( ); if ( stream != null ) content = readStream( length, stream ); else if ( (content = conn.getContent( )) != null && content instanceof java.io.InputStream ) content = readStream( length, (java.io.InputStream)content ); conn.disconnect( ); } /** Read stream bytes and transcode. */ private Object readStream( int length, java.io.InputStream stream ) throws java.io.IOException { final int buflen = Math.max( 1024, Math.max( length, stream.available() ) ); byte[] buf = new byte[buflen];; byte[] bytes = null; for ( int nRead = stream.read(buf); nRead != -1; nRead = stream.read(buf) ) { if ( bytes == null ) { bytes = buf; buf = new byte[buflen]; continue; } final byte[] newBytes = new byte[ bytes.length + nRead ]; System.arraycopy( bytes, 0, newBytes, 0, bytes.length ); System.arraycopy( buf, 0, newBytes, bytes.length, nRead ); bytes = newBytes; } if ( charset == null ) return bytes; try { return new String( bytes, charset ); } catch ( java.io.UnsupportedEncodingException e ) { } return bytes; } /** Get the content. */ public Object getContent( ) { return content; } /** Get the response code. */ public int getResponseCode( ) { return responseCode; } /** Get the response header. */ public java.util.Map<String,java.util.List<String>> getHeaderFields( ) { return responseHeader; } /** Get the URL of the received page. */ public java.net.URL getURL( ) { return responseURL; } /** Get the MIME type. */ public String getMIMEType( ) { return MIMEtype; } }