/* * Copyright (c) 2008, 2009, 2010, 2011 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #import "OFObject.h" @class OFString; @class OFDictionary; @class OFURL; @class OFHTTPRequestResult; @class OFDataArray; typedef enum of_http_request_type_t { OF_HTTP_REQUEST_TYPE_GET, OF_HTTP_REQUEST_TYPE_POST, OF_HTTP_REQUEST_TYPE_HEAD } of_http_request_type_t; /** * \brief A class for storing and performing HTTP requests. */ @interface OFHTTPRequest: OFObject { OFURL *URL; of_http_request_type_t requestType; OFString *queryString; OFDictionary *headers; BOOL redirectsFromHTTPSToHTTPAllowed; } #ifdef OF_HAVE_PROPERTIES @property (copy) OFURL *URL; @property (assign) of_http_request_type_t requestType; @property (copy) OFString *queryString; @property (copy) OFDictionary *headers; @property (assign) BOOL redirectsFromHTTPSToHTTPAllowed; #endif /** * \return A new, autoreleased OFHTTPRequest */ + request; /** * \param url The URL for the request * \return A new, autoreleased OFHTTPRequest */ + requestWithURL: (OFURL*)url; /** * Initializes an already allocated OFHTTPRequest with the specified URL. * * \param url The URL for the request * \return An initialized OFHTTPRequest */ - initWithURL: (OFURL*)url; /** * Sets the URL for the HTTP request. * * \param URL The URL for the HTTP request */ - (void)setURL: (OFURL*)url; /** * \return The URL for the HTTP request */ - (OFURL*)URL; /** * Sets the request type for the HTTP request. * * \param type The request type for the HTTP request */ - (void)setRequestType: (of_http_request_type_t)type; /** * \return The request type for the HTTP request */ - (of_http_request_type_t)requestType; /** * Sets the query string for the HTTP request. * * \param qs The query string for the HTTP request */ - (void)setQueryString: (OFString*)qs; /** * \return The query string for the HTTP request */ - (OFString*)queryString; /** * Sets a dictionary with headers for the HTTP request. * * \param headers A dictionary with headers for the HTTP request */ - (void)setHeaders: (OFDictionary*)headers; /** * \return A dictionary with headers for the HTTP request. */ - (OFDictionary*)headers; /** * Sets whether redirects from HTTPS to HTTP are allowed. * * \param allowed Whether redirects from HTTPS to HTTP are allowed */ - (void)setRedirectsFromHTTPSToHTTPAllowed: (BOOL)allowed; /** * \return Whether redirects from HTTPS to HTTP are allowed */ - (BOOL)redirectsFromHTTPSToHTTPAllowed; /** * Performs the HTTP request and returns an OFHTTPRequestResult. * * \return An OFHTTPRequestResult with the result of the HTTP request */ - (OFHTTPRequestResult*)perform; /** * Performs the HTTP request and returns an OFHTTPRequestResult. * * \param redirects The maximum number of redirects after which no further * attempt is done to follow the redirect, but instead the * redirect is returned as an OFHTTPRequest * \return An OFHTTPRequestResult with the result of the HTTP request */ - (OFHTTPRequestResult*)performWithRedirects: (size_t)redirects; @end /** * \brief A class for storing the result of an HTTP request. */ @interface OFHTTPRequestResult: OFObject { short statusCode; OFDataArray *data; OFDictionary *headers; } #ifdef OF_HAVE_PROPERTIES @property (readonly) short statusCode; @property (readonly, copy) OFDictionary *headers; @property (readonly, retain) OFDataArray *data; #endif /// \cond internal - initWithStatusCode: (short)status headers: (OFDictionary*)headers data: (OFDataArray*)data; /// \endcond /** * \return The status code of the result of the HTTP request */ - (short)statusCode; /** * \return The HTTP headers of the result of the HTTP request */ - (OFDictionary*)headers; /** * \return The data returned for the HTTP request */ - (OFDataArray*)data; @end extern Class of_http_request_tls_socket_class;