cp_httpclient(3) - Linux man page
Name
cp_httpclient - http client api
Synopsis
#include <cprops/httpclient.h>
API INITIALIZATION / FINALIZATION
- int cp_httpclient_init();
int cp_httpclient_shutdown();
CLIENT CREATION / CLEANUP
- cp_httpclient *cp_httpclient_create(char *host, int port);
cp_httpclient * - cp_httpclient_create_proxy(char *host, int port,
char *proxy_host, int proxy_port);
- cp_httpclient *cp_httpclient_create_ssl(char *host, int port,
char *CA_file, char *CA_path, int verification_mode);
cp_httpclient *
- cp_httpclient_create_proxy_ssl(char *host, int port,
char *proxy_host, int proxy_port),
char *CA_file, char *CA_path, int verification_mode);
void cp_httpclient_destroy(cp_httpclient *client);
int cp_httpclient_reopen(cp_httpclient *client, char *host, int port);
HTTP SETTINGS
- void cp_httpclient_set_header(cp_httpclient *client,
char *header, char *value);
- void cp_httpclient_set_auto_drop_headers(cp_httpclient *client,
short mode);
- void cp_httpclient_drop_headers(cp_httpclient *client);
void *cp_httpclient_set_parameter(cp_httpclient *client,
char *name, char *value);
- void cp_httpclient_set_auto_drop_parameters(cp_httpclient *client,
short mode);
- void cp_httpclient_drop_parameters(cp_httpclient *client);
void cp_httpclient_set_http_version(cp_httpclient *client,
cp_http_version version);
- void cp_httpclient_set_request_type(cp_httpclient *client,
cp_http_request_type type);
- void cp_httpclient_set_user_agent(cp_httpclient *client, char *agent);
void cp_httpclient_set_timeout(cp_httpclient *client,
int sec, int usec);
- void cp_httpclient_set_retry(cp_httpclient *client, int retry_count);
void cp_httpclient_set_max_redirects(cp_httpclient *client, int max);
void cp_httpclient_set_cookie_jar(cp_httpclient *client, cp_trie *jar);
ISSUING REQUESTS
- cp_httpclient_result *
- cp_httpclient_fetch(cp_httpclient *client, char *uri);
- int cp_httpclient_fetch_nb(cp_httpclient *client, char *uri,
void *id, cp_httpclient_callback callback, int background);
struct pollfd *cp_httpclient_ctl_default_get_pollfds(int *num);
fd_set *cp_httpclient_ctl_default_get_read_fd_set(int *num);
fd_set *cp_httpclient_ctl_default_get_write_fd_set(int *num);
int cp_httpclient_fetch_nb_exec();
GENERALIZED INTERFACE
- cp_httpclient_ctl *cp_httpclient_ctl_create(int background);
void cp_httpclient_ctl_destroy(cp_httpclient_ctl *ctl);struct pollfd *
- cp_httpclient_ctl_get_pollfds(cp_httpclient_ctl *ctl, int *num);
- fd_set *
- cp_httpclient_ctl_get_read_fd_set(cp_httpclient_ctl *ctl, int *num);
- fd_set *
- cp_httpclient_ctl_get_write_fd_set(cp_httpclient_ctl *ctl, int *num);
int cp_httpclient_fetch_ctl(cp_httpclient_ctl *ctl,
cp_httpclient *client, char *uri, void *id, cp_httpclient_callback callback);
int cp_httpclient_fetch_ctl_exec(cp_httpclient_ctl *ctl);
RESULT HANDLING
- void cp_httpclient_result_destroy(cp_httpclient_result *res);
cp_httpclient * - cp_httpclient_result_get_client(cp_httpclient_result *res);
- void *cp_httpclient_result_id(cp_httpclient_result *res);
cp_http_result_status - cp_httpclient_result_status(cp_httpclient_result *res);
- cp_http_response *
- cp_httpclient_result_get_response(cp_httpclient_result *res);
Description
cp_httpclient represents a tcp connection to a specific host on a specific port and other information required to relay HTTP requests and retrieve server responses. Requests may be issued using a blocking interface, a non-blocking interface and a non-blocking background interface, in which case they are performed by a different thread. Using the non blocking interfaces, requests are processed by polling on an internal cp_httpclient_ctl object. Requests may be assigned to dynamically created cp_httpclient_ctl objects so as to separate execution into different groups.
Here is a description of possible scenarios for performing HTTP calls.
single thread, blocking:
-
o create a client o issue a call to cp_httpclient_fetch, specifying a uri. The call is processed inline and blocks until a response is read or an error occurs. o once done processing the result structure, release it by calling cp_httpclient_result_destroy()
single thread, multiple requests - non-blocking:
-
o create a client for each distinct host : port pair o for each client, issue a call to cp_httpclient_fetch_nb, specifying a uri, an id and a callback, with a value of 0 for the background parameter. The request is added to an internal control stack. o repeatedly call cp_httpclient_fetch_nb_exec() until it returns 0. o you might want to call poll() to prevent spinning on the call to cp_httpclient_fetch_nb_exec(). use cp_httpclient_ctl_default_get_pollfds() to retrieve an array of struct pollfd objects for the underlying file descriptors and call poll() with a non-zero timeout. On systems where poll (2) is unavailable, equivalent select (2) based functions are available - see cp_httpclient_ctl (3). o cp_httpclient_fetch_nb_exec will perform the callbacks given when issuing the requests. Do not call cp_httpclient_result_destroy - the cp_httpclient_result objects are released by the framework in this case.
multi-threaded
-
o create a client for each distinct host : port pair o for each client, issue a call to cp_httpclient_fetch_nb, specifying a uri, an id and a callback, with a value of 1 for the background parameter. The request is added to an internal control stack and the requests are processed in a separate thread. Completed requests or errors will trigger the respective callbacks with cp_httpclient_result objects describing the server response. The result objects are released by the framework.
grouping transfers
-
o create an asynchronous interface control block by calling cp_httpclient_ctl(). The background value determines the control block behavior as follows: o with a background value of 0 proceed as detailed under single thread, but use cp_httpclient_fetch_ctl(), cp_httpclient_fetch_ctl_exec and cp_httpclient_ctl_get_pollfds() rather than the functions for the default group transferring. o with a non-zero background value proceed as detailed under multi-threaded. For values of 2 or above a thread pool of the given size will be used to perform transfers. Which could make sense on machines with more than one cpu when the callback processing time is comparable to the network time.In all cases, a call to cp_httpclient_init() to initialize the api must be made before issuing requests. cp_httpclient_shutdown() must be called to perform cleanup.for more detail see the man pages for specific functions.
See Also
cp_httpclient_create(3), cp_httpclient_set_header(3), cp_httpclient_fetch(3), cp_httpclient_ctl(3), cp_httpclient_result(3)