http_client.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #pragma once
  2. #include "fwd.h"
  3. #include <yt/cpp/mapreduce/interface/io.h>
  4. #include <util/datetime/base.h>
  5. #include <util/generic/maybe.h>
  6. #include <util/generic/string.h>
  7. #include <util/stream/fwd.h>
  8. namespace NYT::NHttpClient {
  9. ////////////////////////////////////////////////////////////////////////////////
  10. struct THttpConfig
  11. {
  12. TDuration SocketTimeout = TDuration::Zero();
  13. };
  14. ////////////////////////////////////////////////////////////////////////////////
  15. class IHttpResponse
  16. {
  17. public:
  18. virtual ~IHttpResponse() = default;
  19. virtual int GetStatusCode() = 0;
  20. virtual IInputStream* GetResponseStream() = 0;
  21. virtual TString GetResponse() = 0;
  22. virtual TString GetRequestId() const = 0;
  23. };
  24. class IHttpRequest
  25. {
  26. public:
  27. virtual ~IHttpRequest() = default;
  28. virtual IOutputStream* GetStream() = 0;
  29. virtual IHttpResponsePtr Finish() = 0;
  30. };
  31. class IHttpClient
  32. {
  33. public:
  34. virtual ~IHttpClient() = default;
  35. virtual IHttpResponsePtr Request(const TString& url, const TString& requestId, const THttpConfig& config, const THttpHeader& header, TMaybe<TStringBuf> body = {}) = 0;
  36. virtual IHttpResponsePtr Request(const TString& url, const TString& requestId, const THttpHeader& header, TMaybe<TStringBuf> body = {})
  37. {
  38. return Request(url, requestId, /*config*/ {}, header, body);
  39. }
  40. virtual IHttpRequestPtr StartRequest(const TString& url, const TString& requestId, const THttpConfig& config, const THttpHeader& header) = 0;
  41. virtual IHttpRequestPtr StartRequest(const TString& url, const TString& requestId, const THttpHeader& header)
  42. {
  43. return StartRequest(url, requestId, /*config*/ {}, header);
  44. }
  45. };
  46. ////////////////////////////////////////////////////////////////////////////////
  47. class THttpResponseStream
  48. : public IFileReader
  49. {
  50. public:
  51. THttpResponseStream(IHttpResponsePtr response)
  52. : Response_(std::move(response))
  53. {
  54. Underlying_ = Response_->GetResponseStream();
  55. }
  56. private:
  57. size_t DoRead(void *buf, size_t len) override
  58. {
  59. return Underlying_->Read(buf, len);
  60. }
  61. size_t DoSkip(size_t len) override
  62. {
  63. return Underlying_->Skip(len);
  64. }
  65. private:
  66. IHttpResponsePtr Response_;
  67. IInputStream* Underlying_;
  68. };
  69. ////////////////////////////////////////////////////////////////////////////////
  70. IHttpClientPtr CreateDefaultHttpClient();
  71. IHttpClientPtr CreateCoreHttpClient(bool useTLS, const TConfigPtr& config);
  72. ////////////////////////////////////////////////////////////////////////////////
  73. } // namespace NYT::NHttpClient