requests.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef HV_REQUESTS_H_
  2. #define HV_REQUESTS_H_
  3. /*
  4. * Imitate python requests api
  5. *
  6. * @code
  7. #include "requests.h"
  8. int main() {
  9. auto resp = requests::get("/ping");
  10. if (resp == NULL) {
  11. printf("request failed!\n");
  12. } else {
  13. printf("%d %s\r\n", resp->status_code, resp->status_message());
  14. printf("%s\n", resp->body.c_str());
  15. }
  16. auto resp2 = requests::post("/echo", "hello,world!");
  17. if (resp2 == NULL) {
  18. printf("request failed!\n");
  19. } else {
  20. printf("%d %s\r\n", resp2->status_code, resp2->status_message());
  21. printf("%s\n", resp2->body.c_str());
  22. }
  23. return 0;
  24. }
  25. **/
  26. #include <memory>
  27. #include "http_client.h"
  28. namespace requests {
  29. typedef std::shared_ptr<HttpRequest> Request;
  30. typedef std::shared_ptr<HttpResponse> Response;
  31. static http_headers DefaultHeaders;
  32. static http_body NoBody;
  33. Response request(http_method method, const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
  34. Request req = Request(new HttpRequest);
  35. Response resp = Response(new HttpResponse);
  36. req->method = method;
  37. req->url = url;
  38. if (&body != &NoBody) {
  39. req->body = body;
  40. }
  41. if (&headers != &DefaultHeaders) {
  42. req->headers = headers;
  43. }
  44. int ret = http_client_send(req.get(), resp.get());
  45. if (ret != 0) {
  46. return NULL;
  47. }
  48. return resp;
  49. }
  50. Response get(const char* url, const http_headers& headers = DefaultHeaders) {
  51. return request(HTTP_GET, url, NoBody, headers);
  52. }
  53. Response options(const char* url, const http_headers& headers = DefaultHeaders) {
  54. return request(HTTP_OPTIONS, url, NoBody, headers);
  55. }
  56. Response head(const char* url, const http_headers& headers = DefaultHeaders) {
  57. return request(HTTP_HEAD, url, NoBody, headers);
  58. }
  59. Response post(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
  60. return request(HTTP_POST, url, body, headers);
  61. }
  62. Response put(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
  63. return request(HTTP_PUT, url, body, headers);
  64. }
  65. Response patch(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
  66. return request(HTTP_PATCH, url, body, headers);
  67. }
  68. // delete is c++ keywrod, we have to replace delete with Delete.
  69. Response Delete(const char* url, const http_body& body = NoBody, const http_headers& headers = DefaultHeaders) {
  70. return request(HTTP_DELETE, url, body, headers);
  71. }
  72. }
  73. #endif // HV_REQUESTS_H_