aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/DownloadUtils.hpp3
-rw-r--r--src/DownloadUtils.cpp6
-rw-r--r--src/plugins/MediaGeneric.cpp2
-rw-r--r--src/plugins/Youtube.cpp2
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()) {