emsApplication/3rdPartner/libhv/examples/http_client_test.cpp

188 lines
5.1 KiB
C++
Raw Normal View History

2024-05-24 12:19:45 +08:00
/*
* @build make examples
*
* @server bin/http_server_test 8080
*
* @client bin/http_client_test
*
*/
#include "requests.h"
#include "axios.h"
using namespace hv;
#include "hthread.h" // import hv_gettid
static void test_http_async_client(HttpClient* cli, int* resp_cnt) {
printf("test_http_async_client request thread tid=%ld\n", hv_gettid());
auto req = std::make_shared<HttpRequest>();
req->method = HTTP_POST;
req->url = "http://127.0.0.1:8080/echo";
req->headers["Connection"] = "keep-alive";
req->body = "This is an async request.";
req->timeout = 10;
cli->sendAsync(req, [resp_cnt](const HttpResponsePtr& resp) {
printf("test_http_async_client response thread tid=%ld\n", hv_gettid());
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
*resp_cnt += 1;
});
}
static void test_http_sync_client(HttpClient* cli) {
HttpRequest req;
req.method = HTTP_POST;
req.url = "http://127.0.0.1:8080/echo";
req.headers["Connection"] = "keep-alive";
req.body = "This is a sync request.";
req.timeout = 10;
HttpResponse resp;
int ret = cli->send(&req, &resp);
if (ret != 0) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp.status_code, resp.status_message());
printf("%s\n", resp.body.c_str());
}
}
static void test_requests() {
// auto resp = requests::get("http://www.example.com");
//
// make clean && make WITH_OPENSSL=yes
// auto resp = requests::get("https://www.baidu.com");
auto resp = requests::get("http://127.0.0.1:8080/ping");
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
// Content-Type: application/json
hv::Json jroot;
jroot["user"] = "admin";
jroot["pswd"] = "123456";
http_headers headers;
headers["Content-Type"] = "application/json";
resp = requests::post("http://127.0.0.1:8080/echo", jroot.dump(), headers);
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
// Content-Type: multipart/form-data
std::map<std::string, std::string> params;
params["user"] = "admin";
params["pswd"] = "123456";
resp = requests::uploadFormFile("http://127.0.0.1:8080/echo", "avatar", "avatar.jpg", params);
if (resp == NULL) {
printf("uploadFormFile failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
/*
size_t filesize = requests::downloadFile("http://www.example.com/index.html", "index.html");
if (filesize == 0) {
printf("downloadFile failed!\n");
} else {
printf("downloadFile success!\n");
}
*/
// async
/*
// auto req = std::make_shared<HttpRequest>();
req->url = "http://127.0.0.1:8080/echo";
req->method = HTTP_POST;
req->body = "This is an async request.";
req->timeout = 10;
requests::async(req, [](const HttpResponsePtr& resp) {
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
});
*/
}
static void test_axios() {
const char* strReq = R"(
{
"method": "POST",
"url": "http://127.0.0.1:8080/echo",
"timeout": 10,
"params": {
"page_no": "1",
"page_size": "10"
},
"headers": {
"Content-Type": "application/json"
},
"body": {
"app_id": "123456",
"app_secret": "abcdefg"
}
}
)";
// sync
auto resp = axios::axios(strReq);
// auto resp = axios::post("http://127.0.0.1:8080/echo", strReq);
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
// async
/*
axios::axios(strReq, [](const HttpResponsePtr& resp) {
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
});
*/
}
int main(int argc, char* argv[]) {
int req_cnt = 0;
if (argc > 1) req_cnt = atoi(argv[1]);
if (req_cnt == 0) req_cnt = 1;
HttpClient sync_client;
HttpClient async_client;
int resp_cnt = 0;
for (int i = 0; i < req_cnt; ++i) {
test_http_async_client(&async_client, &resp_cnt);
test_http_sync_client(&sync_client);
test_requests();
test_axios();
}
// demo wait async finished
while (resp_cnt < req_cnt) hv_delay(100);
printf("finished!\n");
return 0;
}