| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #ifndef HV_REQUESTS_H_
- #define HV_REQUESTS_H_
- /*
- * Inspired by python requests
- *
- * @code
- #include "requests.h"
- int main() {
- 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());
- }
- resp = requests::post("http://127.0.0.1:8080/echo", "hello,world!");
- 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());
- }
- return 0;
- }
- **/
- #include <memory>
- #include "http_client.h"
- namespace requests {
- typedef HttpRequestPtr Request;
- typedef HttpResponsePtr Response;
- typedef HttpResponseCallback ResponseCallback;
- HV_INLINE Response request(Request req) {
- Response resp(new HttpResponse);
- int ret = http_client_send(req.get(), resp.get());
- return ret ? NULL : resp;
- }
- HV_INLINE Response request(http_method method, const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
- Request req(new HttpRequest);
- req->method = method;
- req->url = url;
- if (&body != &NoBody) {
- req->body = body;
- }
- if (&headers != &DefaultHeaders) {
- req->headers = headers;
- }
- return request(req);
- }
- HV_INLINE Response uploadFile(http_method method, const char* url, const char* filepath, const http_headers& headers = DefaultHeaders) {
- Request req(new HttpRequest);
- req->method = method;
- req->url = url;
- if (req->File(filepath) != 200) return NULL;
- if (&headers != &DefaultHeaders) {
- req->headers = headers;
- }
- return request(req);
- }
- #ifndef WITHOUT_HTTP_CONTENT
- HV_INLINE Response uploadFormFile(http_method method, const char* url, const char* name, const char* filepath, const http_headers& headers = DefaultHeaders) {
- Request req(new HttpRequest);
- req->method = method;
- req->url = url;
- req->FormFile(name, filepath);
- if (&headers != &DefaultHeaders) {
- req->headers = headers;
- }
- return request(req);
- }
- #endif
- HV_INLINE Response head(const char* url, const http_headers& headers = DefaultHeaders) {
- return request(HTTP_HEAD, url, NoBody, headers);
- }
- HV_INLINE Response get(const char* url, const http_headers& headers = DefaultHeaders) {
- return request(HTTP_GET, url, NoBody, headers);
- }
- HV_INLINE Response post(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
- return request(HTTP_POST, url, body, headers);
- }
- HV_INLINE Response put(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
- return request(HTTP_PUT, url, body, headers);
- }
- HV_INLINE Response patch(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
- return request(HTTP_PATCH, url, body, headers);
- }
- // delete is c++ keyword, we have to replace delete with Delete.
- HV_INLINE Response Delete(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
- return request(HTTP_DELETE, url, body, headers);
- }
- HV_INLINE int async(Request req, ResponseCallback resp_cb) {
- return http_client_send_async(req, resp_cb);
- }
- }
- #endif // HV_REQUESTS_H_
|