-
- class IRequest(IComponentized):
- """A HTTP request.
-
- Subclasses should override the process() method to determine how
- the request will be processed.
-
- @ivar method: The HTTP method that was used.
- @ivar uri: The full URI that was requested (includes arguments).
- @ivar path: The path only (arguments not included).
- @ivar args: All of the arguments, including URL and POST arguments.
- @type args: A mapping of strings (the argument names) to lists of values.
- i.e., ?foo=bar&foo=baz&quux=spam results in
- {'foo': ['bar', 'baz'], 'quux': ['spam']}.
- @ivar received_headers: All received headers.
- """
- method = Attribute("The HTTP method that was used.")
- uri = Attribute("The full URI that was requested (includes arguments).")
- path = Attribute("The path only (arguments not included).")
- prepath = Attribute("Path segments that have already been handled.")
- postpath = Attribute("Path segments still to be handled.")
- args = Attribute("All of the arguments, including URL and POST arguments.")
- received_headers = Attribute("All received headers.")
- deferred = Attribute("Fired once request processing is finished.")
- client = Attribute("The client that sent this request.")
- content = Attribute("File-like object containing the request body.")
-
- # Methods for received request
- def getHeader(key):
- """Get a header that was sent from the network.
-
- Return C{None} if the header is not present.
- """
-
-
- def getCookie(key):
- """Get a cookie that was sent from the network.
- """
-
-
- def getAllHeaders():
- """Return dictionary of all headers the request received."""
-
- def getRequestHostname():
- """Get the hostname that the user passed in to the request.
-
- This will either use the Host: header (if it is available) or the
- host we are listening on if the header is unavailable.
- """
-
- def getHost():
- """Get my originally requesting transport's host.
-
- Don't rely on the 'transport' attribute, since Request objects may be
- copied remotely. For information on this method's return value, see
- twisted.internet.tcp.Port.
- """
-
- def getClientIP():
- pass
-
- def getClient():
- pass
-
- def getUser():
- pass
-
- def getPassword():
- pass
-
- def isSecure():
- pass
-
- def getSession(sessionInterface = None):
- pass
-
- def URLPath():
- pass
-
- def prePathURL():
- pass
-
- def rememberRootURL():
- """
- Remember the currently-processed part of the URL for later
- recalling.
- """
-
- def getRootURL():
- """
- Get a previously-remembered URL.
- """
-
- # Methods for outgoing request
- def finish():
- """We are finished writing data."""
-
- def write(data):
- """
- Write some data as a result of an HTTP request. The first
- time this is called, it writes out response data.
- """
-
- def addCookie(k, v, expires=None, domain=None, path=None, max_age=None, comment=None, secure=None):
- """Set an outgoing HTTP cookie.
-
- In general, you should consider using sessions instead of cookies, see
- twisted.web.server.Request.getSession and the
- twisted.web.server.Session class for details.
- """
-
- def setResponseCode(code, message=None):
- """Set the HTTP response code.
- """
-
- def setHeader(k, v):
- """Set an outgoing HTTP header.
- """
-
- def redirect(url):
- """Utility function that does a redirect.
-
- The request should have finish() called after this.
- """
-
- def setLastModified(when):
- """Set the X{Last-Modified} time for the response to this request.
-
- If I am called more than once, I ignore attempts to set
- Last-Modified earlier, only replacing the Last-Modified time
- if it is to a later value.
-
- If I am a conditional request, I may modify my response code
- to L{NOT_MODIFIED} if appropriate for the time given.
-
- @param when: The last time the resource being returned was
- modified, in seconds since the epoch.
- @type when: number
- @return: If I am a X{If-Modified-Since} conditional request and
- the time given is not newer than the condition, I return
- L{http.CACHED<CACHED>} to indicate that you should write no
- body. Otherwise, I return a false value.
- """
-
- def setETag(etag):
- """Set an X{entity tag} for the outgoing response.
-
- That's \"entity tag\" as in the HTTP/1.1 X{ETag} header, \"used
- for comparing two or more entities from the same requested
- resource.\"
-
- If I am a conditional request, I may modify my response code
- to L{NOT_MODIFIED<twisted.protocols.http.NOT_MODIFIED>} or
- L{PRECONDITION_FAILED<twisted.protocols.http.PRECONDITION_FAILED>},
- if appropriate for the tag given.
-
- @param etag: The entity tag for the resource being returned.
- @type etag: string
- @return: If I am a X{If-None-Match} conditional request and
- the tag matches one in the request, I return
- L{CACHED<twisted.protocols.http.CACHED>} to indicate that
- you should write no body. Otherwise, I return a false
- value.
- """
-
- def setHost(host, port, ssl=0):
- """Change the host and port the request thinks it's using.
-
- This method is useful for working with reverse HTTP proxies (e.g.
- both Squid and Apache's mod_proxy can do this), when the address
- the HTTP client is using is different than the one we're listening on.
-
- For example, Apache may be listening on https://www.example.com, and then
- forwarding requests to http://localhost:8080, but we don't want HTML produced
- by Twisted to say 'http://localhost:8080', they should say 'https://www.example.com',
- so we do:
-
- >>> request.setHost('www.example.com', 443, ssl=1)
-
- This method is experimental.
- """
-
-
- def notifyFinish(success):
- """
- Return a deferred that fires when the request is finished.
-
- The deferred will fire with C{None} if the request finished
- successfully, or with the error that caused it to be unsuccessful.
- """
-
-
-
-
-
-
-
-
-
- class IRequest(IComponentized):
- """A HTTP request.
-
- Subclasses should override the process() method to determine how
- the request will be processed.
-
- @ivar method: The HTTP method that was used.
- @ivar uri: The full URI that was requested (includes arguments).
- @ivar path: The path only (arguments not included).
- @ivar args: All of the arguments, including URL and POST arguments.
- @type args: A mapping of strings (the argument names) to lists of values.
- i.e., ?foo=bar&foo=baz&quux=spam results in
- {'foo': ['bar', 'baz'], 'quux': ['spam']}.
- @ivar received_headers: All received headers.
- """
- method = Attribute("The HTTP method that was used.")
- uri = Attribute("The full URI that was requested (includes arguments).")
- path = Attribute("The path only (arguments not included).")
- prepath = Attribute("Path segments that have already been handled.")
- postpath = Attribute("Path segments still to be handled.")
- args = Attribute("All of the arguments, including URL and POST arguments.")
- received_headers = Attribute("All received headers.")
- deferred = Attribute("Fired once request processing is finished.")
- client = Attribute("The client that sent this request.")
- content = Attribute("File-like object containing the request body.")
-
- # Methods for received request
- def getHeader(key):
- """Get a header that was sent from the network.
-
- Return C{None} if the header is not present.
- """
-
-
- def getCookie(key):
- """Get a cookie that was sent from the network.
- """
-
-
- def getAllHeaders():
- """Return dictionary of all headers the request received."""
-
- def getRequestHostname():
- """Get the hostname that the user passed in to the request.
-
- This will either use the Host: header (if it is available) or the
- host we are listening on if the header is unavailable.
- """
-
- def getHost():
- """Get my originally requesting transport's host.
-
- Don't rely on the 'transport' attribute, since Request objects may be
- copied remotely. For information on this method's return value, see
- twisted.internet.tcp.Port.
- """
-
- def getClientIP():
- pass
-
- def getClient():
- pass
-
- def getUser():
- pass
-
- def getPassword():
- pass
-
- def isSecure():
- pass
-
- def getSession(sessionInterface = None):
- pass
-
- def URLPath():
- pass
-
- def prePathURL():
- pass
-
- def rememberRootURL():
- """
- Remember the currently-processed part of the URL for later
- recalling.
- """
-
- def getRootURL():
- """
- Get a previously-remembered URL.
- """
-
- # Methods for outgoing request
- def finish():
- """We are finished writing data."""
-
- def write(data):
- """
- Write some data as a result of an HTTP request. The first
- time this is called, it writes out response data.
- """
-
- def addCookie(k, v, expires=None, domain=None, path=None, max_age=None, comment=None, secure=None):
- """Set an outgoing HTTP cookie.
-
- In general, you should consider using sessions instead of cookies, see
- twisted.web.server.Request.getSession and the
- twisted.web.server.Session class for details.
- """
-
- def setResponseCode(code, message=None):
- """Set the HTTP response code.
- """
-
- def setHeader(k, v):
- """Set an outgoing HTTP header.
- """
-
- def redirect(url):
- """Utility function that does a redirect.
-
- The request should have finish() called after this.
- """
-
- def setLastModified(when):
- """Set the X{Last-Modified} time for the response to this request.
-
- If I am called more than once, I ignore attempts to set
- Last-Modified earlier, only replacing the Last-Modified time
- if it is to a later value.
-
- If I am a conditional request, I may modify my response code
- to L{NOT_MODIFIED} if appropriate for the time given.
-
- @param when: The last time the resource being returned was
- modified, in seconds since the epoch.
- @type when: number
- @return: If I am a X{If-Modified-Since} conditional request and
- the time given is not newer than the condition, I return
- L{http.CACHED<CACHED>} to indicate that you should write no
- body. Otherwise, I return a false value.
- """
-
- def setETag(etag):
- """Set an X{entity tag} for the outgoing response.
-
- That's \"entity tag\" as in the HTTP/1.1 X{ETag} header, \"used
- for comparing two or more entities from the same requested
- resource.\"
-
- If I am a conditional request, I may modify my response code
- to L{NOT_MODIFIED<twisted.protocols.http.NOT_MODIFIED>} or
- L{PRECONDITION_FAILED<twisted.protocols.http.PRECONDITION_FAILED>},
- if appropriate for the tag given.
-
- @param etag: The entity tag for the resource being returned.
- @type etag: string
- @return: If I am a X{If-None-Match} conditional request and
- the tag matches one in the request, I return
- L{CACHED<twisted.protocols.http.CACHED>} to indicate that
- you should write no body. Otherwise, I return a false
- value.
- """
-
- def setHost(host, port, ssl=0):
- """Change the host and port the request thinks it's using.
-
- This method is useful for working with reverse HTTP proxies (e.g.
- both Squid and Apache's mod_proxy can do this), when the address
- the HTTP client is using is different than the one we're listening on.
-
- For example, Apache may be listening on https://www.example.com, and then
- forwarding requests to http://localhost:8080, but we don't want HTML produced
- by Twisted to say 'http://localhost:8080', they should say 'https://www.example.com',
- so we do:
-
- >>> request.setHost('www.example.com', 443, ssl=1)
-
- This method is experimental.
- """
-
-
- def notifyFinish(success):
- """
- Return a deferred that fires when the request is finished.
-
- The deferred will fire with C{None} if the request finished
- successfully, or with the error that caused it to be unsuccessful.
- """
-