X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_object.c;h=479e0b699978fcffd017a281be207d28ad1995af;hp=9c5e902db0f7dce7d376697fe78ab582237886e9;hb=e0d6c52bd402a3b89024512bab676504b7153ba9;hpb=ffc893b125c6cc9b385a68a357b08ba2cc4e91f6 diff --git a/http_request_object.c b/http_request_object.c index 9c5e902..479e0b6 100644 --- a/http_request_object.c +++ b/http_request_object.c @@ -23,6 +23,8 @@ #if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) +#include "zend_interfaces.h" + #include "php_http_std_defs.h" #include "php_http_request_object.h" #include "php_http_request_api.h" @@ -52,6 +54,7 @@ HTTP_EMPTY_ARGS(__destruct, 0); HTTP_BEGIN_ARGS(__construct, 0, 0) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(method, 0) + HTTP_ARG_VAL(options, 0) HTTP_END_ARGS; HTTP_EMPTY_ARGS(getOptions, 0); @@ -158,6 +161,7 @@ HTTP_END_ARGS; HTTP_EMPTY_ARGS(getResponseMessage, 1); HTTP_EMPTY_ARGS(getRequestMessage, 1); HTTP_EMPTY_ARGS(getHistory, 1); +HTTP_EMPTY_ARGS(clearHistory, 0); HTTP_EMPTY_ARGS(send, 1); HTTP_BEGIN_ARGS(get, 0, 1) @@ -276,6 +280,7 @@ zend_function_entry http_request_object_fe[] = { HTTP_REQUEST_ME(getResponseMessage, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getRequestMessage, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getHistory, ZEND_ACC_PUBLIC) + HTTP_REQUEST_ME(clearHistory, ZEND_ACC_PUBLIC) HTTP_REQUEST_ALIAS(get, http_get) HTTP_REQUEST_ALIAS(head, http_head) @@ -422,10 +427,7 @@ STATUS _http_request_object_requesthandler(http_request_object *obj, zval *this_ if (!body) { return FAILURE; } - if ((!obj->ch) && (!(obj->ch = curl_easy_init()))) { - http_error(HE_WARNING, HTTP_E_REQUEST, "Could not initilaize curl"); - return FAILURE; - } + HTTP_CHECK_CURL_INIT(obj->ch, curl_easy_init(), return FAILURE); URL = convert_to_type_ex(IS_STRING, GET_PROP(obj, url)); // HTTP_URI_MAXLEN+1 long char * @@ -502,13 +504,13 @@ STATUS _http_request_object_requesthandler(http_request_object *obj, zval *this_ if (status == SUCCESS) { zval *qdata = convert_to_type_ex(IS_STRING, GET_PROP(obj, queryData)); - if (Z_STRLEN_P(qdata) && (strlen(request_uri) < HTTP_URI_MAXLEN)) { + if (Z_STRLEN_P(qdata)) { if (!strchr(request_uri, '?')) { - strcat(request_uri, "?"); + strlcat(request_uri, "?", HTTP_URI_MAXLEN); } else { - strcat(request_uri, "&"); + strlcat(request_uri, "&", HTTP_URI_MAXLEN); } - strncat(request_uri, Z_STRVAL_P(qdata), HTTP_URI_MAXLEN - strlen(request_uri)); + strlcat(request_uri, Z_STRVAL_P(qdata), HTTP_URI_MAXLEN); } status = http_request_init(obj->ch, Z_LVAL_P(meth), request_uri, body, Z_ARRVAL_P(GET_PROP(obj, options))); @@ -647,20 +649,27 @@ static inline void _http_request_get_options_subr(INTERNAL_FUNCTION_PARAMETERS, /* ### USERLAND ### */ -/* {{{ proto void HttpRequest::__construct([string url[, long request_method = HTTP_GET]]) +/* {{{ proto void HttpRequest::__construct([string url[, int request_method = HTTP_METH_GET[, array options]]]) * - * Instantiate a new HttpRequest object which can be used to issue HEAD, GET - * and POST (including posting files) HTTP requests. + * Instantiate a new HttpRequest object. + * + * Accepts a string as optional parameter containing the target request url. + * Additianally accepts an optional int parameter specifying the request method + * to use and an associative array as optional third parameter which will be + * passed to HttpRequest::setOptions(). + * + * Throws HttpException. */ PHP_METHOD(HttpRequest, __construct) { char *URL = NULL; int URL_len; long meth = -1; + zval *options = NULL; getObject(http_request_object, obj); SET_EH_THROW_HTTP(); - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sl", &URL, &URL_len, &meth)) { + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sla", &URL, &URL_len, &meth, &options)) { INIT_PARR(obj, options); INIT_PARR(obj, responseInfo); INIT_PARR(obj, responseData); @@ -673,6 +682,9 @@ PHP_METHOD(HttpRequest, __construct) if (meth > -1) { UPD_PROP(obj, long, method, meth); } + if (options) { + zend_call_method_with_1_params(&getThis(), Z_OBJCE_P(getThis()), NULL, "setoptions", NULL, options); + } } SET_EH_NORMAL(); } @@ -699,6 +711,12 @@ PHP_METHOD(HttpRequest, __destruct) /* {{{ proto bool HttpRequest::setOptions([array options]) * * Set the request options to use. See http_get() for a full list of available options. + * + * Accepts an array as optional parameters, wich values will overwrite the + * currently set request options. If the parameter is empty or mitted, + * the optoions of the HttpRequest object will be reset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setOptions) { @@ -774,6 +792,8 @@ PHP_METHOD(HttpRequest, setOptions) /* {{{ proto array HttpRequest::getOptions() * * Get currently set options. + * + * Returns an associative array containing currently set options. */ PHP_METHOD(HttpRequest, getOptions) { @@ -793,6 +813,11 @@ PHP_METHOD(HttpRequest, getOptions) /* {{{ proto bool HttpRequest::setSslOptions([array options]) * * Set SSL options. + * + * Accepts an associative array as parameter containing any SSL specific options. + * If the parameter is empty or omitted, the SSL options will be reset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setSslOptions) { @@ -803,6 +828,10 @@ PHP_METHOD(HttpRequest, setSslOptions) /* {{{ proto bool HttpRequest::addSslOptions(array options) * * Set additional SSL options. + * + * Expects an associative array as parameter containing additional SSL specific options. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, addSslOptions) { @@ -813,6 +842,8 @@ PHP_METHOD(HttpRequest, addSslOptions) /* {{{ proto array HttpRequest::getSslOtpions() * * Get previously set SSL options. + * + * Returns an associative array containing any previously set SSL options. */ PHP_METHOD(HttpRequest, getSslOptions) { @@ -823,6 +854,11 @@ PHP_METHOD(HttpRequest, getSslOptions) /* {{{ proto bool HttpRequest::addHeaders(array headers) * * Add request header name/value pairs. + * + * Expects an ssociative array as parameter containing additional header + * name/value pairs. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, addHeaders) { @@ -832,6 +868,11 @@ PHP_METHOD(HttpRequest, addHeaders) /* {{{ proto bool HttpRequest::setHeaders([array headers]) * * Set request header name/value pairs. + * + * Accepts an associative array as parameter containing header name/value pairs. + * If the parameter is empty or omitted, all previously set headers will be unset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setHeaders) { @@ -842,6 +883,8 @@ PHP_METHOD(HttpRequest, setHeaders) /* {{{ proto array HttpRequest::getHeaders() * * Get previously set request headers. + * + * Returns an associative array containing all currently set headers. */ PHP_METHOD(HttpRequest, getHeaders) { @@ -852,6 +895,11 @@ PHP_METHOD(HttpRequest, getHeaders) /* {{{ proto bool HttpRequest::setCookies([array cookies]) * * Set cookies. + * + * Accepts an associative array as parameter containing cookie name/value pairs. + * If the parameter is empty or omitted, all previously set cookies will be unset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setCookies) { @@ -862,6 +910,11 @@ PHP_METHOD(HttpRequest, setCookies) /* {{{ proto bool HttpRequest::addCookies(array cookies) * * Add cookies. + * + * Expects an associative array as parameter containing any cookie name/value + * pairs to add. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, addCookies) { @@ -872,6 +925,8 @@ PHP_METHOD(HttpRequest, addCookies) /* {{{ proto array HttpRequest::getCookies() * * Get previously set cookies. + * + * Returns an associative array containing any previously set cookies. */ PHP_METHOD(HttpRequest, getCookies) { @@ -882,6 +937,10 @@ PHP_METHOD(HttpRequest, getCookies) /* {{{ proto bool HttpRequest::setUrl(string url) * * Set the request URL. + * + * Expects a string as parameter specifying the request url. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setUrl) { @@ -901,6 +960,8 @@ PHP_METHOD(HttpRequest, setUrl) /* {{{ proto string HttpRequest::getUrl() * * Get the previously set request URL. + * + * Returns the currently set request url as string. */ PHP_METHOD(HttpRequest, getUrl) { @@ -915,10 +976,14 @@ PHP_METHOD(HttpRequest, getUrl) } /* }}} */ -/* {{{ proto bool HttpRequest::setMethod(long request_method) +/* {{{ proto bool HttpRequest::setMethod(int request_method) * - * Set the request methods; one of the HTTP_HEAD, HTTP_GET or - * HTTP_POST constants. + * Set the request method. + * + * Expects an int as parameter specifying the request method to use. + * In PHP 5.1+ HttpRequest::METH, otherwise the HTTP_METH constants can be used. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setMethod) { @@ -934,9 +999,11 @@ PHP_METHOD(HttpRequest, setMethod) } /* }}} */ -/* {{{ proto long HttpRequest::getMethod() +/* {{{ proto int HttpRequest::getMethod() * * Get the previously set request method. + * + * Returns the currently set request method. */ PHP_METHOD(HttpRequest, getMethod) { @@ -954,7 +1021,12 @@ PHP_METHOD(HttpRequest, getMethod) /* {{{ proto bool HttpRequest::setContentType(string content_type) * * Set the content type the post request should have. - * Use this only if you know what you're doing. + * + * Expects a string as parameters containing the content type of the request + * (primary/secondary). + * + * Returns TRUE on success, or FALSE if the content type does not seem to + * contain a primary and a secondary part. */ PHP_METHOD(HttpRequest, setContentType) { @@ -966,11 +1038,7 @@ PHP_METHOD(HttpRequest, setContentType) RETURN_FALSE; } - if (!strchr(ctype, '/')) { - http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Content-Type '%s' doesn't seem to contain a primary and a secondary part", ctype); - RETURN_FALSE; - } - + HTTP_CHECK_CONTENT_TYPE(ctype, RETURN_FALSE); UPD_STRL(obj, contentType, ctype, ct_len); RETURN_TRUE; } @@ -979,6 +1047,8 @@ PHP_METHOD(HttpRequest, setContentType) /* {{{ proto string HttpRequest::getContentType() * * Get the previously content type. + * + * Returns the previously set content type as string. */ PHP_METHOD(HttpRequest, getContentType) { @@ -995,9 +1065,14 @@ PHP_METHOD(HttpRequest, getContentType) /* {{{ proto bool HttpRequest::setQueryData([mixed query_data]) * - * Set the URL query parameters to use. - * Overwrites previously set query parameters. + * Set the URL query parameters to use, overwriting previously set query parameters. * Affects any request types. + * + * Accepts a string or associative array parameter containing the pre-encoded + * query string or to be encoded query fields. If the parameter is empty or + * omitted, the query data will be unset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setQueryData) { @@ -1030,6 +1105,8 @@ PHP_METHOD(HttpRequest, setQueryData) /* {{{ proto string HttpRequest::getQueryData() * * Get the current query data in form of an urlencoded query string. + * + * Returns a string containing the urlencoded query. */ PHP_METHOD(HttpRequest, getQueryData) { @@ -1046,8 +1123,12 @@ PHP_METHOD(HttpRequest, getQueryData) /* {{{ proto bool HttpRequest::addQueryData(array query_params) * - * Add parameters to the query parameter list. + * Add parameters to the query parameter list, leaving previously set unchanged. * Affects any request type. + * + * Expects an associative array as parameter containing the query fields to add. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, addQueryData) { @@ -1075,8 +1156,13 @@ PHP_METHOD(HttpRequest, addQueryData) /* {{{ proto bool HttpRequest::addPostFields(array post_data) * - * Adds POST data entries. - * Affects only POST requests. + * Adds POST data entries, leaving previously set unchanged, unless a + * post entry with the same name already exists. + * Affects only POST and custom requests. + * + * Expects an associative array as parameter containing the post fields. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, addPostFields) { @@ -1096,9 +1182,13 @@ PHP_METHOD(HttpRequest, addPostFields) /* {{{ proto bool HttpRequest::setPostFields([array post_data]) * - * Set the POST data entries. - * Overwrites previously set POST data. - * Affects only POST requests. + * Set the POST data entries, overwriting previously set POST data. + * Affects only POST and custom requests. + * + * Accepts an associative array as parameter containing the post fields. + * If the parameter is empty or omitted, the post data will be unset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setPostFields) { @@ -1123,6 +1213,8 @@ PHP_METHOD(HttpRequest, setPostFields) /* {{{ proto array HttpRequest::getPostFields() * * Get previously set POST data. + * + * Returns the currently set post fields as associative array. */ PHP_METHOD(HttpRequest, getPostFields) { @@ -1140,8 +1232,15 @@ PHP_METHOD(HttpRequest, getPostFields) /* {{{ proto bool HttpRequest::setRawPostData([string raw_post_data]) * - * Set raw post data to send. Don't forget to specify a content type. - * Affects only POST requests. + * Set raw post data to send, overwriting previously set raw post data. Don't + * forget to specify a content type. Affects only POST and custom requests. + * Only either post fields or raw post data can be used for each request. + * Raw post data has higher precedence and will be used even if post fields + * are set. + * + * Accepts a string as parameter containing the *raw* post data. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setRawPostData) { @@ -1164,8 +1263,12 @@ PHP_METHOD(HttpRequest, setRawPostData) /* {{{ proto bool HttpRequest::addRawPostData(string raw_post_data) * - * Add raw post data. - * Affects only POST requests. + * Add raw post data, leaving previously set raw post data unchanged. + * Affects only POST and custom requests. + * + * Expects a string as parameter containing the raw post data to concatenate. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, addRawPostData) { @@ -1198,6 +1301,8 @@ PHP_METHOD(HttpRequest, addRawPostData) /* {{{ proto string HttpRequest::getRawPostData() * * Get previously set raw post data. + * + * Returns a string containing the currently set raw post data. */ PHP_METHOD(HttpRequest, getRawPostData) { @@ -1214,8 +1319,16 @@ PHP_METHOD(HttpRequest, getRawPostData) /* {{{ proto bool HttpRequest::addPostFile(string name, string file[, string content_type = "application/x-octetstream"]) * - * Add a file to the POST request. - * Affects only POST requests. + * Add a file to the POST request, leaving prefiously set files unchanged. + * Affects only POST and custom requests. Cannot be used with raw post data. + * + * Expects a string parameter containing the form element name, and a string + * paremeter containing the path to the file which should be uploaded. + * Additionally accepts an optional string parameter which chould contain + * the content type of the file. + * + * Returns TRUE on success, or FALSE if the content type seems not to contain a + * primary and a secondary content type part. */ PHP_METHOD(HttpRequest, addPostFile) { @@ -1229,10 +1342,7 @@ PHP_METHOD(HttpRequest, addPostFile) } if (type_len) { - if (!strchr(type, '/')) { - http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Content-Type '%s' doesn't seem to contain a primary and a secondary part", type); - RETURN_FALSE; - } + HTTP_CHECK_CONTENT_TYPE(type, RETURN_FALSE); } else { type = "application/x-octetstream"; type_len = sizeof("application/x-octetstream") - 1; @@ -1254,9 +1364,14 @@ PHP_METHOD(HttpRequest, addPostFile) /* {{{ proto bool HttpRequest::setPostFiles([array post_files]) * - * Set files to post. - * Overwrites previously set post files. - * Affects only POST requests. + * Set files to post, overwriting previously set post files. + * Affects only POST and requests. Cannot be used with raw post data. + * + * Accepts an array containing the files to post. Each entry should be an + * associative array with "name", "file" and "type" keys. If the parameter + * is empty or omitted the post files will be unset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setPostFiles) { @@ -1281,6 +1396,8 @@ PHP_METHOD(HttpRequest, setPostFiles) /* {{{ proto array HttpRequest::getPostFiles() * * Get all previously added POST files. + * + * Returns an array containing currently set post files. */ PHP_METHOD(HttpRequest, getPostFiles) { @@ -1298,8 +1415,12 @@ PHP_METHOD(HttpRequest, getPostFiles) /* {{{ proto bool HttpRequest::setPutFile([string file]) * - * Set file to put. - * Affects only PUT requests. + * Set file to put. Affects only PUT requests. + * + * Accepts a string as parameter referencing the path to file. + * If the parameter is empty or omitted the put file will be unset. + * + * Returns TRUE on success, or FALSE on failure. */ PHP_METHOD(HttpRequest, setPutFile) { @@ -1319,6 +1440,8 @@ PHP_METHOD(HttpRequest, setPutFile) /* {{{ proto string HttpRequest::getPutFile() * * Get previously set put file. + * + * Returns a string containing the path to the currently set put file. */ PHP_METHOD(HttpRequest, getPutFile) { @@ -1336,6 +1459,13 @@ PHP_METHOD(HttpRequest, getPutFile) /* {{{ proto array HttpRequest::getResponseData() * * Get all response data after the request has been sent. + * + * Returns an associative array with the key "headers" containing an associative + * array holding all response headers, as well as the ley "body" containing a + * string with the response body. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. */ PHP_METHOD(HttpRequest, getResponseData) { @@ -1354,6 +1484,15 @@ PHP_METHOD(HttpRequest, getResponseData) /* {{{ proto mixed HttpRequest::getResponseHeader([string name]) * * Get response header(s) after the request has been sent. + * + * Accepts an string as optional parameter specifying a certain header to read. + * If the parameter is empty or omitted all response headers will be returned. + * + * Returns either a string with the value of the header matching name if requested, + * FALSE on failure, or an associative array containing all reponse headers. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. */ PHP_METHOD(HttpRequest, getResponseHeader) { @@ -1387,6 +1526,17 @@ PHP_METHOD(HttpRequest, getResponseHeader) /* {{{ proto array HttpRequest::getResponseCookie([string name]) * * Get response cookie(s) after the request has been sent. + * + * Accepts a string as optional parameter specifying the name of the cookie to read. + * If the parameter is empty or omitted, an associative array with all received + * cookies will be returned. + * + * Returns either an associative array with the cookie's name, value and any + * additional params of the cookie matching name if requested, FALSE on failure, + * or an array containing all received cookies as arrays. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. */ PHP_METHOD(HttpRequest, getResponseCookie) { @@ -1479,6 +1629,11 @@ PHP_METHOD(HttpRequest, getResponseCookie) /* {{{ proto string HttpRequest::getResponseBody() * * Get the response body after the request has been sent. + * + * Returns a string containing the response body. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. */ PHP_METHOD(HttpRequest, getResponseBody) { @@ -1502,6 +1657,11 @@ PHP_METHOD(HttpRequest, getResponseBody) /* {{{ proto int HttpRequest::getResponseCode() * * Get the response code after the request has been sent. + * + * Returns an int representing the response code. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. */ PHP_METHOD(HttpRequest, getResponseCode) { @@ -1516,10 +1676,21 @@ PHP_METHOD(HttpRequest, getResponseCode) } /* }}} */ -/* {{{ proto array HttpRequest::getResponseInfo([string name]) +/* {{{ proto mixed HttpRequest::getResponseInfo([string name]) * * Get response info after the request has been sent. * See http_get() for a full list of returned info. + * + * Accepts a string as optional parameter specifying the info to read. + * If the parameter is empty or omitted, an associative array containing + * all available info will be returned. + * + * Returns either a scalar containing the value of the info matching name if + * requested, FALSE on failure, or an associative array containing all + * available info. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. */ PHP_METHOD(HttpRequest, getResponseInfo) { @@ -1552,7 +1723,16 @@ PHP_METHOD(HttpRequest, getResponseInfo) /* {{{ proto HttpMessage HttpRequest::getResponseMessage() * - * Get the full response as HttpMessage object. + * Get the full response as HttpMessage object after the request has been sent. + * + * Returns an HttpMessage object of the response. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. Use HttpMessage::getParentMessage() + * to access the data of previously received responses whithin this request + * cycle. + * + * Throws HttpException. */ PHP_METHOD(HttpRequest, getResponseMessage) { @@ -1577,6 +1757,13 @@ PHP_METHOD(HttpRequest, getResponseMessage) /* {{{ proto HttpMessage HttpRequest::getRequestMessage() * * Get sent HTTP message. + * + * Returns an HttpMessage object representing the sent request. + * + * If redirects were allowed and several responses were received, the data + * references the last received response. Use HttpMessage::getParentMessage() + * to access the data of previously sent requests whithin this request + * cycle. */ PHP_METHOD(HttpRequest, getRequestMessage) { @@ -1595,6 +1782,21 @@ PHP_METHOD(HttpRequest, getRequestMessage) } /* }}} */ +/* {{{ proto HttpMessage HttpRequest::getHistory() + * + * Get all sent requests and received responses as an HttpMessage object. + * + * If you don't want to record history at all, set the instance variable + * HttpRequest::$recoedHistory to FALSE. + * + * Returns an HttpMessage object representing the complete request/response + * history. + * + * The object references the last received response, use HttpMessage::getParentMessage() + * to access the data of previously sent requests and received responses. + * + * Throws HttpMalformedHeaderException. + */ PHP_METHOD(HttpRequest, getHistory) { NO_ARGS; @@ -1610,10 +1812,29 @@ PHP_METHOD(HttpRequest, getHistory) SET_EH_NORMAL(); } } +/* }}} */ + +/* {{{ proto void HttpRequest::clearHistory() + * + * Clear the history. + */ +PHP_METHOD(HttpRequest, clearHistory) +{ + NO_ARGS { + getObject(http_request_object, obj); + phpstr_dtor(&obj->history); + } +} +/* }}} */ /* {{{ proto HttpMessage HttpRequest::send() * * Send the HTTP request. + * + * Returns the received response as HttpMessage object. + * + * Throws HttpRuntimeException, HttpRequestException, + * HttpMalformedHeaderException, HttpEncodingException. * * GET example: *