| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- #ifndef HV_HTTP_CLIENT_H_
- #define HV_HTTP_CLIENT_H_
- #include "hexport.h"
- #include "hssl.h"
- #include "HttpMessage.h"
- /*
- #include <stdio.h>
- #include "HttpClient.h"
- int main(int argc, char* argv[]) {
- HttpRequest req;
- req.method = HTTP_GET;
- req.url = "http://www.example.com";
- HttpResponse res;
- int ret = http_client_send(&req, &res);
- printf("%s\n", req.Dump(true,true).c_str());
- if (ret != 0) {
- printf("* Failed:%s:%d\n", http_client_strerror(ret), ret);
- }
- else {
- printf("%s\n", res.Dump(true,true).c_str());
- }
- return ret;
- }
- */
- typedef struct http_client_s http_client_t;
- HV_EXPORT http_client_t* http_client_new(const char* host = NULL, int port = DEFAULT_HTTP_PORT, int https = 0);
- HV_EXPORT int http_client_del(http_client_t* cli);
- HV_EXPORT const char* http_client_strerror(int errcode);
- // timeout: s
- HV_EXPORT int http_client_set_timeout(http_client_t* cli, int timeout);
- // SSL/TLS
- HV_EXPORT int http_client_set_ssl_ctx(http_client_t* cli, hssl_ctx_t ssl_ctx);
- // hssl_ctx_new(opt) -> http_client_set_ssl_ctx
- HV_EXPORT int http_client_new_ssl_ctx(http_client_t* cli, hssl_ctx_opt_t* opt);
- // common headers
- HV_EXPORT int http_client_clear_headers(http_client_t* cli);
- HV_EXPORT int http_client_set_header(http_client_t* cli, const char* key, const char* value);
- HV_EXPORT int http_client_del_header(http_client_t* cli, const char* key);
- HV_EXPORT const char* http_client_get_header(http_client_t* cli, const char* key);
- // http_proxy
- HV_EXPORT int http_client_set_http_proxy(http_client_t* cli, const char* host, int port);
- // https_proxy
- HV_EXPORT int http_client_set_https_proxy(http_client_t* cli, const char* host, int port);
- // no_proxy
- HV_EXPORT int http_client_add_no_proxy(http_client_t* cli, const char* host);
- // sync
- HV_EXPORT int http_client_send(http_client_t* cli, HttpRequest* req, HttpResponse* resp);
- // async
- // Intern will start an EventLoopThread when http_client_send_async first called,
- // http_client_del will destroy the thread.
- HV_EXPORT int http_client_send_async(http_client_t* cli, HttpRequestPtr req, HttpResponseCallback resp_cb = NULL);
- // top-level api
- // http_client_new -> http_client_send -> http_client_del
- HV_EXPORT int http_client_send(HttpRequest* req, HttpResponse* resp);
- // http_client_send_async(&default_async_client, ...)
- HV_EXPORT int http_client_send_async(HttpRequestPtr req, HttpResponseCallback resp_cb = NULL);
- // low-level api
- // @retval >=0 connfd, <0 error
- HV_EXPORT int http_client_connect(http_client_t* cli, const char* host, int port, int https, int timeout);
- HV_EXPORT int http_client_send_header(http_client_t* cli, HttpRequest* req);
- HV_EXPORT int http_client_send_data(http_client_t* cli, const char* data, int size);
- HV_EXPORT int http_client_recv_data(http_client_t* cli, char* data, int size);
- HV_EXPORT int http_client_recv_response(http_client_t* cli, HttpResponse* resp);
- HV_EXPORT int http_client_close(http_client_t* cli);
- namespace hv {
- class HttpClient {
- public:
- HttpClient(const char* host = NULL, int port = DEFAULT_HTTP_PORT, int https = 0) {
- _client = http_client_new(host, port, https);
- }
- ~HttpClient() {
- if (_client) {
- http_client_del(_client);
- _client = NULL;
- }
- }
- // timeout: s
- int setTimeout(int timeout) {
- return http_client_set_timeout(_client, timeout);
- }
- // SSL/TLS
- int setSslCtx(hssl_ctx_t ssl_ctx) {
- return http_client_set_ssl_ctx(_client, ssl_ctx);
- }
- int newSslCtx(hssl_ctx_opt_t* opt) {
- return http_client_new_ssl_ctx(_client, opt);
- }
- // headers
- int clearHeaders() {
- return http_client_clear_headers(_client);
- }
- int setHeader(const char* key, const char* value) {
- return http_client_set_header(_client, key, value);
- }
- int delHeader(const char* key) {
- return http_client_del_header(_client, key);
- }
- const char* getHeader(const char* key) {
- return http_client_get_header(_client, key);
- }
- // http_proxy
- int setHttpProxy(const char* host, int port) {
- return http_client_set_http_proxy(_client, host, port);
- }
- // https_proxy
- int setHttpsProxy(const char* host, int port) {
- return http_client_set_https_proxy(_client, host, port);
- }
- // no_proxy
- int addNoProxy(const char* host) {
- return http_client_add_no_proxy(_client, host);
- }
- // sync
- int send(HttpRequest* req, HttpResponse* resp) {
- return http_client_send(_client, req, resp);
- }
- // async
- int sendAsync(HttpRequestPtr req, HttpResponseCallback resp_cb = NULL) {
- return http_client_send_async(_client, req, std::move(resp_cb));
- }
- // low-level api
- int connect(const char* host, int port = DEFAULT_HTTP_PORT, int https = 0, int timeout = DEFAULT_HTTP_CONNECT_TIMEOUT) {
- return http_client_connect(_client, host, port, https, timeout);
- }
- int sendHeader(HttpRequest* req) {
- return http_client_send_header(_client, req);
- }
- int sendData(const char* data, int size) {
- return http_client_send_data(_client, data, size);
- }
- int recvData(char* data, int size) {
- return http_client_recv_data(_client, data, size);
- }
- int recvResponse(HttpResponse* resp) {
- return http_client_recv_response(_client, resp);
- }
- int close() {
- return http_client_close(_client);
- }
- private:
- http_client_t* _client;
- };
- }
- #endif // HV_HTTP_CLIENT_H_
|