diff options
-rw-r--r-- | include/DownloadUtils.hpp | 3 | ||||
-rw-r--r-- | src/DownloadUtils.cpp | 6 | ||||
-rw-r--r-- | src/plugins/MediaGeneric.cpp | 2 | ||||
-rw-r--r-- | src/plugins/Youtube.cpp | 2 |
4 files changed, 8 insertions, 5 deletions
diff --git a/include/DownloadUtils.hpp b/include/DownloadUtils.hpp index 498b976..ed7f766 100644 --- a/include/DownloadUtils.hpp +++ b/include/DownloadUtils.hpp @@ -24,7 +24,8 @@ namespace QuickMedia { DownloadResult download_head_to_string(const std::string &url, std::string &result, bool use_browser_useragent = false, bool fail_on_error = true); // Returns the remote name from the content-disposition header or tries to extract the file name from url. Can return empty name DownloadResult url_get_remote_name(const std::string &url, std::string &result, bool use_browser_useragent); - DownloadResult download_to_string(const std::string &url, std::string &result, const std::vector<CommandArg> &additional_args, bool use_browser_useragent = false, bool fail_on_error = true, std::string *header = nullptr, int download_limit = 1024 * 1024 * 100); // 100mb download limit + // Note: if |cloudflare_bypass| is set to true then tls is limited to version 1.1 and the user agent is changed + DownloadResult download_to_string(const std::string &url, std::string &result, const std::vector<CommandArg> &additional_args, bool use_browser_useragent = false, bool fail_on_error = true, bool cloudflare_bypass = false, std::string *header = nullptr, int download_limit = 1024 * 1024 * 100); // 100mb download limit // Note: This function saves the content to the file atomically DownloadResult download_to_string_cache(const std::string &url, std::string &result, const std::vector<CommandArg> &additional_args, bool use_browser_useragent = false, DownloadErrorHandler error_handler = nullptr, Path cache_path = ""); // Note: This function saves the content to the file atomically diff --git a/src/DownloadUtils.cpp b/src/DownloadUtils.cpp index 5be1990..e546bd1 100644 --- a/src/DownloadUtils.cpp +++ b/src/DownloadUtils.cpp @@ -192,7 +192,7 @@ namespace QuickMedia { } // TODO: Add timeout - DownloadResult download_to_string(const std::string &url, std::string &result, const std::vector<CommandArg> &additional_args, bool use_browser_useragent, bool fail_on_error, std::string *header, int download_limit) { + DownloadResult download_to_string(const std::string &url, std::string &result, const std::vector<CommandArg> &additional_args, bool use_browser_useragent, bool fail_on_error, bool cloudflare_bypass, std::string *header, int download_limit) { result.clear(); sf::Clock timer; std::vector<const char*> args; @@ -204,10 +204,12 @@ namespace QuickMedia { if(!arg.value.empty()) args.push_back(arg.value.c_str()); } - if(use_browser_useragent) { + if(!cloudflare_bypass && use_browser_useragent) { args.push_back("-H"); args.push_back(useragent_str); } + if(cloudflare_bypass) + args.insert(args.end(), { "--tls-max", "1.1", "-A", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FSL 7.0.6" }); if(header) args.push_back("-i"); args.push_back("--"); diff --git a/src/plugins/MediaGeneric.cpp b/src/plugins/MediaGeneric.cpp index 11b0957..1f2389a 100644 --- a/src/plugins/MediaGeneric.cpp +++ b/src/plugins/MediaGeneric.cpp @@ -38,7 +38,7 @@ namespace QuickMedia { args.push_back({ "-H", "referer: " + website_url }); std::string website_data; - if(download_to_string(url, website_data, args, true) != DownloadResult::OK) + if(download_to_string(url, website_data, args, true, true, true) != DownloadResult::OK) return PluginResult::NET_ERR; if(website_data.empty()) diff --git a/src/plugins/Youtube.cpp b/src/plugins/Youtube.cpp index 276fba5..24fd448 100644 --- a/src/plugins/Youtube.cpp +++ b/src/plugins/Youtube.cpp @@ -274,7 +274,7 @@ R"END( for(int i = 0; i < max_redirects; ++i) { std::string response_body; std::string response_headers; - download_to_string(playback_url, response_body, additional_args, true, true, &response_headers, 4096); + download_to_string(playback_url, response_body, additional_args, true, true, false, &response_headers, 4096); std::string content_type = header_extract_value(response_headers, "content-type"); if(content_type.empty()) { |