Hi J.F., 

I made your changes and also added some informational displays. Also, I
had to close the connection after the first method call because I got
warning messages about SimpleHttpConnectionManager being used
incorrectly. 

I reran the app, but the page returned from the second method call is
the same as the first. Is there another change I have to make? As I
mentioned, the form on the page is:

<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%"
/>

Thanks very much!

Following is my revised source. 

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());
              }

              ////////////////////////////////////////////////
              // 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
                    {
                        ////////////////////
                        //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       
} 




-----Original Message-----
From: J.-F. Rompre [mailto:[EMAIL PROTECTED] 
Sent: Saturday, August 23, 2008 6:18 PM
To: Commons Users List
Subject: Re: How Add Form Parameters to a Get Request

It seems like there is not much missing - only to connect your form info
with the request, then fire off another request - using setParameter(
name,
value) instead of NameValuePairs (only used with PostMethod), so I would
try (my changes commented):

import java.io.IOException;
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)
         {
               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.
             int statusCode = client.executeMethod(method);

             if (statusCode != HttpStatus.SC_OK) {
               System.err.println("Method failed: " +
method.getStatusLine());
             }
             responseHeaders = method.getResponseHeaders();
             ////////////////////////////////////////////////
         // Prepare parameters
         ////////////////////////////////////////////////
         NameValuePair[] params =
         {
                 new NameValuePair("action",
"http://www.domaintools.com/go/";),
                 new NameValuePair("service", "whois"),
                 new NameValuePair("q", domainToLookup)
         };

         // What do I do next?

//*************TRY THIS:***********************************
    method = new GetMethod( params[0].getValue()); //"
http://www.domaintools.com/go/";
    for ( int i=1; i < params.length; i++)
        method.getParams().setParameter( params[i].getName(),
params[i].getValue());

    client.execute( method);
    ////////////////////
    //harvest response info, etc....
    //////////////////////////
//**************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();
           }
         }
       }


On Sat, Aug 23, 2008 at 2:51 PM, Murphy Steve
<[EMAIL PROTECTED]>wrote:

> Please excuse this horrible posting. I'm completely new to commons 
> HttpClient and I'm struggling.
>
> I'm using commons HttpClient to post a get request to a page that has 
> a form. I'm following instructions on the programming primer at 
> http://hc.apache.org/httpcomponents-client/primer.html
>
> The page has the followng definition for its form:
>
> <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%"
> />
>
> So I'm creating parameters like so:
> private static String domainToLookup = "www.ezines.com"; 
> NameValuePair[] params = {  new NameValuePair("action", 
> "http://www.domaintools.com/go/";),
>  new NameValuePair("service", "whois"),  new NameValuePair("q", 
> domainToLookup) };
>
> Question 1: Is this the correct way to contstruct form parameters?
> Question 2: Now that I've defined parameters I need to somehow add 
> them to my request. How do I do this?
>
> Are there any code samples this scenario?
>
> Below is a listing of my shameful hack:
>
> import java.io.IOException;
> 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)
>          {
>                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.
>              int statusCode = client.executeMethod(method);
>
>              if (statusCode != HttpStatus.SC_OK) {
>                System.err.println("Method failed: " + 
> method.getStatusLine());
>              }
>              responseHeaders = method.getResponseHeaders();
>              ////////////////////////////////////////////////
>          // Prepare parameters
>          ////////////////////////////////////////////////
>          NameValuePair[] params =
>          {
>                  new NameValuePair("action", 
> "http://www.domaintools.com/go/";),
>                  new NameValuePair("service", "whois"),
>                  new NameValuePair("q", domainToLookup)
>          };
>
>          // What do I do next?
>
>            } 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();
>            }
>          }
>        }
>
> Thanks.
> Steve-O
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to