Http.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //---------------------------------------------------------------------------
  2. #ifndef HttpH
  3. #define HttpH
  4. //---------------------------------------------------------------------------
  5. #include <memory>
  6. //---------------------------------------------------------------------------
  7. struct ne_session_s;
  8. struct ne_request_s;
  9. struct ne_ssl_certificate_s;
  10. struct ssl_st;
  11. //---------------------------------------------------------------------------
  12. class THttp;
  13. typedef void __fastcall (__closure * THttpDownloadEvent)(THttp * Sender, __int64 Size, bool & Cancel);
  14. typedef void __fastcall (__closure * THttpErrorEvent)(THttp * Sender, int Status, const UnicodeString & Message);
  15. //---------------------------------------------------------------------------
  16. extern const int BasicHttpResponseLimit;
  17. //---------------------------------------------------------------------------
  18. class THttp
  19. {
  20. public:
  21. THttp();
  22. ~THttp();
  23. void Get();
  24. void Post(const UnicodeString & Request);
  25. void Put(const UnicodeString & Request);
  26. bool IsCertificateError();
  27. __property UnicodeString URL = { read = FURL, write = FURL };
  28. __property UnicodeString ProxyHost = { read = FProxyHost, write = FProxyHost };
  29. __property int ProxyPort = { read = FProxyPort, write = FProxyPort };
  30. __property TStrings * RequestHeaders = { read = FRequestHeaders, write = FRequestHeaders };
  31. __property UnicodeString Response = { read = GetResponse };
  32. __property RawByteString ResponseRaw = { read = FResponse };
  33. __property TStrings * ResponseHeaders = { read = FResponseHeaders };
  34. __property __int64 ResponseLength = { read = GetResponseLength };
  35. __property __int64 ResponseLimit = { read = FResponseLimit, write = FResponseLimit };
  36. __property THttpDownloadEvent OnDownload = { read = FOnDownload, write = FOnDownload };
  37. __property THttpErrorEvent OnError = { read = FOnError, write = FOnError };
  38. __property UnicodeString Certificate = { read = FCertificate, write = FCertificate };
  39. __property int ConnectTimeout = { read = FConnectTimeout, write = FConnectTimeout };
  40. private:
  41. UnicodeString FURL;
  42. UnicodeString FProxyHost;
  43. int FProxyPort;
  44. RawByteString FResponse;
  45. __int64 FResponseLimit;
  46. std::unique_ptr<Exception> FException;
  47. THttpDownloadEvent FOnDownload;
  48. THttpErrorEvent FOnError;
  49. UnicodeString FHostName;
  50. UnicodeString FCertificateError;
  51. TStrings * FRequestHeaders;
  52. TStrings * FResponseHeaders;
  53. UnicodeString FCertificate;
  54. int FConnectTimeout;
  55. static int NeonBodyReader(void * UserData, const char * Buf, size_t Len);
  56. int NeonBodyReaderImpl(const char * Buf, size_t Len);
  57. void SendRequest(const char * Method, const UnicodeString & Request);
  58. UnicodeString GetResponse();
  59. __int64 GetResponseLength();
  60. void InitSslSession(ssl_st * Ssl, ne_session_s * Session);
  61. static int NeonServerSSLCallback(void * UserData, int Failures, const ne_ssl_certificate_s * Certificate);
  62. int NeonServerSSLCallbackImpl(int Failures, const ne_ssl_certificate_s * Certificate);
  63. };
  64. //---------------------------------------------------------------------------
  65. #endif