download.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //
  2. // download.cpp
  3. //
  4. // This sample demonstrates the URIStreamOpener class.
  5. //
  6. // Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
  7. // and Contributors.
  8. //
  9. // SPDX-License-Identifier: BSL-1.0
  10. //
  11. #include "Poco/URIStreamOpener.h"
  12. #include "Poco/StreamCopier.h"
  13. #include "Poco/Path.h"
  14. #include "Poco/URI.h"
  15. #include "Poco/SharedPtr.h"
  16. #include "Poco/Exception.h"
  17. #include "Poco/Net/HTTPStreamFactory.h"
  18. #include "Poco/Net/HTTPSStreamFactory.h"
  19. #include "Poco/Net/FTPStreamFactory.h"
  20. #include "Poco/Net/SSLManager.h"
  21. #include "Poco/Net/KeyConsoleHandler.h"
  22. #include "Poco/Net/ConsoleCertificateHandler.h"
  23. #include <memory>
  24. #include <iostream>
  25. using Poco::URIStreamOpener;
  26. using Poco::StreamCopier;
  27. using Poco::Path;
  28. using Poco::URI;
  29. using Poco::SharedPtr;
  30. using Poco::Exception;
  31. using Poco::Net::HTTPStreamFactory;
  32. using Poco::Net::HTTPSStreamFactory;
  33. using Poco::Net::FTPStreamFactory;
  34. using Poco::Net::SSLManager;
  35. using Poco::Net::Context;
  36. using Poco::Net::KeyConsoleHandler;
  37. using Poco::Net::PrivateKeyPassphraseHandler;
  38. using Poco::Net::InvalidCertificateHandler;
  39. using Poco::Net::ConsoleCertificateHandler;
  40. class SSLInitializer
  41. {
  42. public:
  43. SSLInitializer()
  44. {
  45. Poco::Net::initializeSSL();
  46. }
  47. ~SSLInitializer()
  48. {
  49. Poco::Net::uninitializeSSL();
  50. }
  51. };
  52. int main(int argc, char** argv)
  53. {
  54. SSLInitializer sslInitializer;
  55. HTTPStreamFactory::registerFactory();
  56. HTTPSStreamFactory::registerFactory();
  57. FTPStreamFactory::registerFactory();
  58. if (argc != 2)
  59. {
  60. Path p(argv[0]);
  61. std::cerr << "usage: " << p.getBaseName() << " <uri>" << std::endl;
  62. std::cerr << " Download <uri> to standard output." << std::endl;
  63. std::cerr << " Works with http, https, ftp and file URIs." << std::endl;
  64. return 1;
  65. }
  66. // Note: we must create the passphrase handler prior Context
  67. SharedPtr<InvalidCertificateHandler> ptrCert = new ConsoleCertificateHandler(false); // ask the user via console
  68. Context::Ptr ptrContext = new Context(Context::CLIENT_USE, "", "", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
  69. SSLManager::instance().initializeClient(0, ptrCert, ptrContext);
  70. try
  71. {
  72. URI uri(argv[1]);
  73. std::auto_ptr<std::istream> pStr(URIStreamOpener::defaultOpener().open(uri));
  74. StreamCopier::copyStream(*pStr.get(), std::cout);
  75. }
  76. catch (Exception& exc)
  77. {
  78. std::cerr << exc.displayText() << std::endl;
  79. return 1;
  80. }
  81. return 0;
  82. }