(Reposting this in case it was overlooked because it was a child of another thread.)
My app has to go to the following web site: http://whois.domaintools.com/ The the app must programatically fill in a text field in a form and submit the form. The value for the text field is: www.ezines.com The html for the form is this: <form action="http://www.domaintools.com/go/" method="get"> <input type="hidden" name="service" value="whois" /> <input name="q" type="text" value="" maxlength="60" size="40" style="font-size: 256%"/> <input type="submit" value="Lookup" size="40" style="font-size: 206%" /> </td> </tr> </table></form> I'm using the code below, but the page returned is the original page rather than the page that is returned if I acutally go to the site, enter information in the text field, and manually submit the form. Two questions: 1) Based on the form definition above, are my parameter definitions correct? 2) Are there any other problems with my app? Thanks... import java.io.IOException; import java.io.InputStream; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class QuestionToPost { private static String URL = "http://whois.domaintools.com/"; private static String domainToLookup = "www.ezines.com"; public static void main(String[] args) { System.out.println("============"); System.out.println("Starting App"); System.out.println("============"); Header responseHeaders[] = null; // Create an instance of HttpClient. HttpClient client = new HttpClient(); // Create a method instance. GetMethod method = new GetMethod(URL); method.setFollowRedirects(true); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { //////////////////////////////////////////////// // Get the page with the form //////////////////////////////////////////////// // Execute the method. System.out.println("--------------------------"); System.out.println("INFO"); System.out.println("Getting " + URL + " page."); System.out.println("--------------------------"); int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + method.getStatusLine()); } else { System.out.println("Method succeeded: " + method.getStatusLine()); } //////////////////////////////////////////////// // Close old connection to eliminate warning message //////////////////////////////////////////////// System.out.println("--------------------------"); System.out.println("INFO"); System.out.println("Closing old connection."); System.out.println("--------------------------"); method.releaseConnection(); //////////////////////////////////////////////// // Prepare parameters //////////////////////////////////////////////// //****************** OLD *********************** NameValuePair[] params = { new NameValuePair("action", "http://www.domaintools.com/go/"), new NameValuePair("service", "whois"), new NameValuePair("q", domainToLookup) }; //****************** END OLD BLOCK ************* //*************TRY THIS:*********************************** method = new GetMethod( params[0].getValue()); //"http://www.domaintools.com/go/" method.setFollowRedirects(true); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); for ( int i=1; i < params.length; i++) method.getParams().setParameter( params[i].getName(), params[i].getValue()); System.out.println("--------------------------"); System.out.println("INFO"); System.out.println("Posting form"); System.out.println("--------------------------"); statusCode = client.executeMethod( method); if (statusCode != HttpStatus.SC_OK) { System.out.println("Method failed: " + method.getStatusLine()); } else { System.out.println("Method succeeded: " + method.getStatusLine()); System.out.println("Status code: " + statusCode); //////////////////// //harvest response info, etc.... ////////////////////////// System.out.println("--------------------------"); System.out.println("INFO"); System.out.println("Page contents:"); System.out.println("--------------------------"); printPageFromInputStream(method.getResponseBodyAsStream()); } //**************end of TRY THIS comment *************************** } catch (HttpException e) { System.err.println("Fatal protocol violation: " + e.getMessage()); e.printStackTrace(); } catch (IOException e) { System.err.println("Fatal transport error: " + e.getMessage()); e.printStackTrace(); } finally { // Release the connection. method.releaseConnection(); System.out.println("============"); System.out.println("App Finished"); System.out.println("============"); } } // END main() public static void printPageFromInputStream(InputStream is) { byte[] b = new byte[50000]; int ret = 0; int offset = 0; try { while (ret != -1) { ret = is.read(b, offset, 1); System.out.print( (char) b[offset]); offset++; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // END printPageFromInputStream }
