package com.mindprod.http;
import com.mindprod.common18.EIO;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
/**
* Simulates a browser posting a form to CGI via HEAD.
* <p/>
* It does not read any data. It is used for link checking where the server accepts HEAD requests.
* If the server might ignore HEAD requests, use Probe instead.
*
* @author Roedy Green, Canadian Mind Products
* @version 2.3 2010-11-14 new method setInstanceFollowRedirects
* @see com.mindprod.htmlmacros.macros.Head
* @since 1998
*/
@SuppressWarnings( { "WeakerAccess" } )
public final class Head extends Http
{
/**
* constructor
*/
public Head()
{
}
/**
* Check if URL is working
* Send a form full of data to the CGI host using HEAD.
*
* @param url complete URL including get parms pre-encoded.
* http: or https:
*
* @return responseCode
*/
@SuppressWarnings( { "UnusedAssignment", "MethodNamesDifferingOnlyByCase" } )
public int send( URL url )
{
try
{
init();
this.url = url;
final HttpURLConnection urlc = ( HttpURLConnection ) url.openConnection();
urlc.setAllowUserInteraction( false );
urlc.setDoInput( true );
urlc.setDoOutput( false );// nothing beyond original request
urlc.setUseCaches( false );
urlc.setRequestMethod( "HEAD" );
setStandardProperties( urlc );
urlc.connect();
responseCode = urlc.getResponseCode();
rawResponseMessage = urlc.getResponseMessage();
urlc.disconnect();
return responseCode;
}
catch ( ClassCastException e )
{
interruptResponseMessage = "Protocol not http: or https:";
return responseCode;
}
catch ( IOException e )
{
interruptResponseMessage = e.getClass().getName() + " : " + e.getMessage();
return responseCode;
}
}
/**
* Check if URL is working
* Send a form full of data to the CGI host using HEAD.
* You must have done a setParms first.
*
* @param host host name of the website, Should be form:"mindprod.com", no lead http://.
* @param port -1 if default, 8081 for local echoserver.
* @param action action of form, page on website. Usually has a lead /.
*
* @return responseCode
*/
@SuppressWarnings( { "UnusedAssignment", "MethodNamesDifferingOnlyByCase" } )
public int send( String host, int port, String action )
{
try
{
init();
URL url = new URI( "http",
null,
host,
port,
action,
null,
null ).toURL();
url = new URL( url.toString() + getEncodedParms( EIO.UTF8 ) );
return send( url );
}
catch ( URISyntaxException e )
{
interruptResponseMessage = "Bad URI/URL";
return responseCode;
}
catch ( IOException e )
{
interruptResponseMessage = e.getClass().getName() + " : " + e.getMessage();
return responseCode;
}
}
}