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>