You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by mo...@apache.org on 2002/01/18 21:22:45 UTC

cvs commit: jakarta-commons/latka/src/java/org/apache/commons/latka/xml ParameterHandler.java RequestHandler.java RequestHeaderHandler.java

morgand     02/01/18 12:22:45

  Modified:    latka/src/java/org/apache/commons/latka/http Request.java
                        RequestImpl.java SessionImpl.java
               latka/src/java/org/apache/commons/latka/xml
                        ParameterHandler.java RequestHandler.java
                        RequestHeaderHandler.java
  Log:
  fixed some inaccurate method names, fixed Latka's handling of referers
  following redirects, and added support for following 301 or 302 redirects
  to other servers (HttpClient workaround)
  
  Revision  Changes    Path
  1.10      +54 -4     jakarta-commons/latka/src/java/org/apache/commons/latka/http/Request.java
  
  Index: Request.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/http/Request.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Request.java	10 Oct 2001 20:57:16 -0000	1.9
  +++ Request.java	18 Jan 2002 20:22:44 -0000	1.10
  @@ -115,17 +115,50 @@
      * @param name  the name of the parameter
      * @param name  the value of the parameter
      *
  -   * @throws java.lang.IllegalArgumentException  if a parameter is null or not a String
      */
  -  public void setParameter(String name, String value);
  +  public void addParameter(String name, String value);
   
     /**
  +   * Set all the parameters for the request.  Overrides
  +   * any parameters that have been already set by addParameter();
  +   * 
  +   * @param parameters
  +   *               all parameters for this request
  +   */
  +  public void setParameters(Parameters parameters);
  +
  +  /**
  +   * Get the parameters for the request, so that they can
  +   * be copied to another request if necessary.
  +   * 
  +   * @return parameters for this request
  +   */
  +  public Parameters getParameters();
  +  
  +  /**
      * Sets a request header.
      * 
      * @param headerName header name
      * @param headerValue header value or null for a null header
      */
  -  public void setHeader(String headerName, String headerValue);
  +  public void addHeader(String headerName, String headerValue);
  +
  +  /**
  +   * Set all the headers for the request.  Overrides
  +   * any headers that have been already set by addHeader();
  +   * 
  +   * @param requestHeaders
  +   *               all headers for this request
  +   */
  +  public void setHeaders(RequestHeaders requestHeaders);
  +
  +  /**
  +   * Get the headers for the request, so that they can
  +   * be copied to another request if necessary.
  +   * 
  +   * @return headers for this request
  +   */
  +  public RequestHeaders getHeaders();
   
     // getHeader method purposely ommitted.  HttpClient does not retain
     // header information after the request is submitted.
  @@ -153,5 +186,22 @@
      * @param userName user name 
      * @param password user's password
      */
  -  public void setCredentials(String userName, String password);
  +  public void setCredentials(Credentials credentials);
  +
  +  /**
  +   * Whether or not this request will instruct HttpClient
  +   * to follow local redirects automatically.
  +   * 
  +   * @return true if HttpClient will redirect a 301 or 302 response
  +   */
  +  public boolean followRedirects();
  +
  +  /**
  +   * Return the constant representing the HTTP method
  +   * to use in this request
  +   * 
  +   * @return HTTP method for this request
  +   */
  +  public int getMethod();
  +
   }
  
  
  
  1.16      +63 -7     jakarta-commons/latka/src/java/org/apache/commons/latka/http/RequestImpl.java
  
  Index: RequestImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/http/RequestImpl.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- RequestImpl.java	16 Jan 2002 22:17:17 -0000	1.15
  +++ RequestImpl.java	18 Jan 2002 20:22:44 -0000	1.16
  @@ -64,6 +64,7 @@
   import java.util.Map;
   import java.util.Date;
   import java.util.Iterator;
  +import java.util.List;
   
   import org.apache.commons.httpclient.UsernamePasswordCredentials;
   import org.apache.commons.httpclient.HttpClient;
  @@ -90,8 +91,9 @@
     /** Standard HTTPS Port */
     public static final int HTTPS_PORT = 443;
   
  -  protected String  _host = null;
  -  protected int     _port = -1;
  +  protected String  _host   = null;
  +  protected int     _port   = -1;
  +  protected int     _method = -1;
   
     protected SessionImpl _session    = null;
     protected HttpMethod  _httpMethod = null;
  @@ -100,6 +102,10 @@
     protected long        _requestTiming = -1;
     protected String      _label      = null;
   
  +  protected RequestHeaders _requestHeaders = new RequestHeadersImpl();
  +  protected Parameters _parameters = new ParametersImpl();
  +  protected boolean _followRedirects = true;
  +
     protected HttpClient _httpClient = new HttpClient();
   
     protected static final Category _log = Category.getInstance(RequestImpl.class);
  @@ -118,6 +124,8 @@
      */
     protected RequestImpl(String label, URL url, int httpMethod, HttpState state, 
                           SessionImpl session, boolean followRedirects) {
  +    _followRedirects = followRedirects;
  +    _method = httpMethod;
       _httpClient.setState(state);
       
       _label = label;
  @@ -160,18 +168,51 @@
       return _httpMethod;
     }
   
  +  // defined in interface
  +  public RequestHeaders getHeaders() {
  +    return _requestHeaders;
  +  }
  +
  +  // defined in interface
  +  public void setHeaders(RequestHeaders requestHeaders) {
  +    _requestHeaders = requestHeaders;
  +  }
  +
  +  // defined in the interface
  +  public Parameters getParameters() {
  +    return _parameters;
  +  }
  +
  +  public void setParameters(Parameters parameters) {
  +    _parameters = parameters;
  +  }
  +
     ///////////////////////////////
     // Request Interface Methods //
     ///////////////////////////////
   
     // defined in the interface
  -  public void setCredentials(String userName, String password) {
  +  public void setCredentials(Credentials credentials) {
       // null implies that this credential is the default (vs. specifying a realm)
  -    _session._state.setCredentials(null, new UsernamePasswordCredentials(userName,password));
  +    _session._state.setCredentials(null, new UsernamePasswordCredentials(credentials.getUserName(),credentials.getPassword()));
     }
   
     // defined in the interface
     public Response execute() throws IOException {
  +
  +    // set the request headers in HTTPClient
  +    List headers = _requestHeaders.getHeaders();
  +    for (int i = 0; i < headers.size(); ++i) {
  +      String[] header = (String[]) headers.get(i);
  +      _httpMethod.addRequestHeader(header[0],header[1]);
  +    }
  +
  +    List parameters = _parameters.getParameters();
  +    for (int i = 0; i < parameters.size(); ++i) {
  +      String[] parameter = (String[]) parameters.get(i);
  +      addHttpClientParameter(parameter[0],parameter[1]);
  +    }
  +
       // for timing
       Date startDate = new Date();
   
  @@ -226,6 +267,11 @@
       return _label;
     }
   
  +  // defined in the interface
  +  public void addParameter(String name, String value) {
  +    _parameters.addParameter(name,value);
  +  }
  +
     /**
      * Associate a parameter with this request.
      *
  @@ -234,7 +280,7 @@
      *
      * @throws java.lang.IllegalArgumentException  if a parameter is null
      */
  -  public void setParameter(String name, String value) {
  +  protected void addHttpClientParameter(String name, String value) {
   
       _log.info("adding parameter, name:");
       _log.info(name);
  @@ -275,8 +321,8 @@
      * @param headerName name of any HTTP request header
      * @param headerValue value of that header
      */
  -  public void setHeader(String headerName, String headerValue) {
  -    _httpMethod.addRequestHeader(headerName,headerValue);
  +  public void addHeader(String headerName, String headerValue) {
  +    _requestHeaders.addHeader(headerName,headerValue);
     }
   
     /**
  @@ -342,6 +388,16 @@
       _log.debug("closing connection");
       _httpClient.endSession();
       _log.debug("connection closed");
  +  }
  +
  +  // defined in the interface
  +  public boolean followRedirects() {
  +    return _followRedirects;
  +  }
  +
  +  // defined in interface
  +  public int getMethod() {
  +    return _method;
     }
   
   }
  
  
  
  1.9       +1 -1      jakarta-commons/latka/src/java/org/apache/commons/latka/http/SessionImpl.java
  
  Index: SessionImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/http/SessionImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SessionImpl.java	16 Jan 2002 22:17:17 -0000	1.8
  +++ SessionImpl.java	18 Jan 2002 20:22:44 -0000	1.9
  @@ -126,7 +126,7 @@
       URL referer = getReferer();
   
       if (referer != null) {
  -      request.setHeader("Referer", referer.toString());
  +      request.addHeader("Referer", referer.toString());
       }
   
       return request;
  
  
  
  1.7       +1 -1      jakarta-commons/latka/src/java/org/apache/commons/latka/xml/ParameterHandler.java
  
  Index: ParameterHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/xml/ParameterHandler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ParameterHandler.java	23 Aug 2001 16:24:27 -0000	1.6
  +++ ParameterHandler.java	18 Jan 2002 20:22:44 -0000	1.7
  @@ -114,7 +114,7 @@
       _tagName = _lastTagName;
   
       if (localName.equals("paramValue")) {
  -      _request.setParameter(_paramName.toString(),_paramValue.toString());
  +      _request.addParameter(_paramName.toString(),_paramValue.toString());
         _tagName = null;
       } else if (!localName.startsWith("param")) {
         release(namespaceURI,localName,rawName);
  
  
  
  1.15      +50 -3     jakarta-commons/latka/src/java/org/apache/commons/latka/xml/RequestHandler.java
  
  Index: RequestHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/xml/RequestHandler.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- RequestHandler.java	17 Jan 2002 20:30:24 -0000	1.14
  +++ RequestHandler.java	18 Jan 2002 20:22:44 -0000	1.15
  @@ -64,6 +64,8 @@
   import java.net.MalformedURLException;
   import java.net.URL;
   
  +import java.util.LinkedList;
  +import java.util.List;
   import java.util.Properties;
   
   import org.apache.commons.latka.LatkaProperties;
  @@ -71,7 +73,11 @@
   
   import org.apache.commons.latka.event.*;
   
  +import org.apache.commons.latka.http.Credentials;
  +import org.apache.commons.latka.http.CredentialsImpl;
   import org.apache.commons.latka.http.Request;
  +import org.apache.commons.latka.http.RequestHeaders;
  +import org.apache.commons.latka.http.RequestHeadersImpl;
   import org.apache.commons.latka.http.Response;
   import org.apache.commons.latka.http.Session;
   import org.apache.commons.latka.http.SessionImpl;
  @@ -100,6 +106,9 @@
     protected Request  _request = null;
     protected Response _response = null;
     protected boolean  _requestExecuted = false;
  +  protected Credentials _credentials = null;
  +
  +  protected List _visitedURLs = new LinkedList();
   
     protected static final Category _log = 
     Category.getInstance(RequestHandler.class);
  @@ -157,7 +166,8 @@
           _log.info("request skipped");
         }
       } else if (localName.equals("credentials")) {
  -      _request.setCredentials(atts.getValue("userName"),atts.getValue("password"));
  +      _credentials = new CredentialsImpl(atts.getValue("userName"),atts.getValue("password"));
  +      _request.setCredentials(_credentials);
       } else if (localName.equals("requestHeader")) {  
         _log.info("adding request headers");
         RequestHeaderHandler headerHandler  = new RequestHeaderHandler(_reader,_request);
  @@ -173,7 +183,7 @@
   
         if (!_skipped) {
           try {
  -          _response = _request.execute();
  +          _response = executeRequest();
             _log.debug("request executed and response obtained");
             ValidationReflectionHandler handler = 
               new ValidationReflectionHandler(_reader,_response,_listener);
  @@ -194,7 +204,7 @@
       if (localName.equals("request")) {
         if (_requestExecuted == false && !_skipped) {
           try {
  -          _request.execute();
  +          executeRequest();
             _listener.requestSucceeded(new RequestSucceededEvent(_request,_response));
           } catch (IOException e) {
             _listener.requestError(new RequestErrorEvent(_request,_response,e));
  @@ -206,6 +216,43 @@
   
         release();
       }
  +  }
  +
  +
  +  /**
  +   * Executes the request.  In the event of a 301 or 302,
  +   * this method may reassign the _request variable to
  +   * a different value.
  +   */
  +  protected Response executeRequest() throws IOException {
  +    Response response = _request.execute();
  +
  +    if (_request.followRedirects() == false) {
  +      return response;
  +    }
  +
  +    // execute the request until either we get a non-redirect response, or
  +    // we visit a URL we have already visited
  +    while (response.getStatusCode() == 301 || response.getStatusCode() == 302) {
  +      // follow the redirect
  +      URL url = new URL(response.getHeader("location"));
  +
  +      if (_visitedURLs.contains(url.toString())) {
  +        return response;
  +      }
  +
  +      Request request = _session.createRequest(_request.getLabel(),url,_request.getMethod(),true);
  +      request.setParameters(_request.getParameters());
  +      request.setHeaders(_request.getHeaders());
  +      if (_credentials != null) {
  +        request.setCredentials(_credentials);
  +      }
  +      _request = request;
  +      response = _request.execute();
  +      _visitedURLs.add(url.toString());
  +    }
  +
  +    return response;
     }
   
     protected Request buildRequest(Attributes atts)
  
  
  
  1.4       +1 -1      jakarta-commons/latka/src/java/org/apache/commons/latka/xml/RequestHeaderHandler.java
  
  Index: RequestHeaderHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/xml/RequestHeaderHandler.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RequestHeaderHandler.java	23 Aug 2001 16:24:27 -0000	1.3
  +++ RequestHeaderHandler.java	18 Jan 2002 20:22:44 -0000	1.4
  @@ -88,7 +88,7 @@
   
       if (localName.equals("requestHeader")) {
         log.info("adding header");
  -      _request.setHeader(atts.getValue("headerName"),
  +      _request.addHeader(atts.getValue("headerName"),
                            atts.getValue("headerValue"));
       } else {
         // release as soon as all the headers are processed
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>