View Javadoc

1   /*
2    * Copyright 1999-2002,2004 The Apache Software Foundation.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.apache.commons.latka.http;
18  
19  import java.net.URL;
20  import java.io.IOException;
21  
22  /**
23   * A Latka Request represents a request from an HTTP server.
24   *
25   * @author <a href="mailto:dsale@us.britannica.com">Doug Sale</a>
26   * @author <a href="mailto:mdelagra@us.britannica.com">Morgan Delagrange</a>
27   * @author dIon Gillard
28   */
29  public interface Request {
30  
31      /** An integer representing the HTTP GET method */
32      public static final int HTTP_METHOD_GET = 0;
33      /** An integer representing the HTTP POST method */
34      public static final int HTTP_METHOD_POST = 1;
35      /** An integer representing the HTTP POST method */
36      public static final int HTTP_METHOD_HEAD = 2;
37  
38      /**
39       * Execute this HTTP request.  In the event of a 301 or 302,
40       * this method may need to create a new Request, 
41       * due to an idiosyncracy of
42       * HttpClient.  In that case, the Response.getRequest()
43       * method will return the actual Request that was executed.
44       * This will probably be fixed at some point in the future.
45       *
46       * @return a Response object represnting the HTTP response to the request
47       *
48       * @throws IOException if the remote server could not be reached
49       */
50      Response execute() throws IOException;
51  
52      /**
53       * Assigns a text label to this request.  This label
54       * will be made available to a LatkaEventListener
55       * during a test's execution
56       * 
57       * @return the label associated with this request
58       */
59      String getLabel();
60  
61      /**
62       * Gets the URL that Latka will attempt to contact.  Note:
63       * since Latka will respect most redirects, this may not
64       * be the URL that returns the actual response.
65       * 
66       * @return the URL associated with this HTTP request
67       */
68      URL getURL();
69  
70      /**
71       * Associate a parameter with this request.
72       *
73       * @param name  the name of the parameter
74       * @param value the value of the parameter
75       *
76       */
77      void addParameter(String name, String value);
78  
79      /**
80       * Set all the parameters for the request.  Overrides
81       * any parameters that have been already set by addParameter();
82       * 
83       * @param parameters
84       *               all parameters for this request
85       */
86      void setParameters(Parameters parameters);
87  
88      /**
89       * Get the parameters for the request, so that they can
90       * be copied to another request if necessary.
91       * 
92       * @return parameters for this request
93       */
94      Parameters getParameters();
95  
96      /**
97       * Sets a request header.
98       * 
99       * @param headerName header name
100      * @param headerValue header value or null for a null header
101      */
102     void addHeader(String headerName, String headerValue);
103 
104     /**
105      * Set all the headers for the request.  Overrides
106      * any headers that have been already set by addHeader();
107      * 
108      * @param requestHeaders
109      *               all headers for this request
110      */
111     void setHeaders(RequestHeaders requestHeaders);
112 
113     /**
114      * Get the headers for the request, so that they can
115      * be copied to another request if necessary.
116      * 
117      * @return headers for this request
118      */
119     RequestHeaders getHeaders();
120 
121     // getHeader method purposely ommitted.  HttpClient does not retain
122     // header information after the request is submitted.
123 
124     /**
125      * Retrieve the session associated with this request.
126      *
127      * @return a <code>Session</code> object
128      */
129     Session getSession();
130 
131     /**
132      * The amount of time it took to execute the
133      * request in milliseconds, or -1 if the request has not
134      * been executed successfully
135      *
136      * @return time it took to execute the request in millis
137      */
138     int getRequestTiming();
139 
140     /**
141      * Sets the basic authentication credentials for this request,
142      * if any.
143      * 
144      * @param credentials user's identification
145      */
146     void setCredentials(Credentials credentials);
147 
148     /**
149      * Return the credentials for this request
150      * 
151      * @return Request credentials
152      */
153     Credentials getCredentials();
154 
155     /**
156      * Whether or not this request will instruct HttpClient
157      * to follow local redirects automatically.
158      * 
159      * @return true if HttpClient will redirect a 301 or 302 response
160      */
161     boolean followRedirects();
162 
163     /**
164      * Return the constant representing the HTTP method
165      * to use in this request
166      * 
167      * @return HTTP method for this request
168      */
169     int getMethod();
170 
171     /**
172      * Set the request body for a manual POST.  You may not
173      * both set the request body and add parameters.
174      * 
175      * @param body   Body to POST
176      */
177     void setRequestBody(String body);
178 
179     /**
180      * Sets the version of HTTP that is used in the request.
181      * If the version of HTTP specified is not 1.0 or 1.1,
182      * then the default of 1.1 will be used.
183      *
184      * @param version  HTTP version.
185      */
186     void setVersion(String version);
187 
188     /**
189      * Get the HTTP version to use in this request
190      * 
191      * @return HTTP version for the request
192      */
193     String getVersion();
194 
195 }