forked from markus/S_New4
v6.1.1: fix cloudflare in download img
This commit is contained in:
parent
ea246e18d0
commit
8872282941
@ -150,7 +150,7 @@ Reply PageManager::getServerRequest(std::string protocol, std::string Url, bool
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); //follows redirection
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); // Funktion zum Speichern des outputs in einem string
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); //Legt die Variable readbuffer fest
|
||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36");
|
||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, USER_AGENT);
|
||||
/*"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0" */
|
||||
if(useCookies)
|
||||
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookieFilePath.c_str());
|
||||
@ -205,6 +205,7 @@ Reply PageManager::getServerRequest(std::string protocol, std::string Url, bool
|
||||
res = curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url);
|
||||
if( res != CURLE_OK || !url ) {
|
||||
perror((std::string("\33[2K\r => Error: curl_easy_getinfo failed: ") + curl_easy_strerror(res)).c_str());
|
||||
curl_easy_cleanup(curl);
|
||||
return Reply("-1");
|
||||
} else
|
||||
returnUrl=url;
|
||||
@ -248,8 +249,15 @@ Reply PageManager::getServerRequest(std::string protocol, std::string Url, bool
|
||||
}
|
||||
|
||||
|
||||
int PageManager::downLoadToFile(std::string filePath, std::string url)
|
||||
int PageManager::downLoadToFile(std::string filePath, std::string url, int rek_num)
|
||||
{
|
||||
if(rek_num > 15) {
|
||||
if(debugMode)
|
||||
std::cout << " -> EXIT(): downLoadToFile Out of trys..." << std::endl;
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
CURL *curl_handle;
|
||||
FILE *pagefile;
|
||||
CURLcode res;
|
||||
@ -290,11 +298,28 @@ int PageManager::downLoadToFile(std::string filePath, std::string url)
|
||||
/* send all data to this function */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
|
||||
|
||||
//Sock5Proxy für Curl
|
||||
if(sock5Proxy != "")
|
||||
//Settings
|
||||
if(sock5Proxy != "") {
|
||||
|
||||
curl_easy_setopt(curl_handle, CURLOPT_PROXY, sock5Proxy.c_str() ); //Sock5Proxy für Curl
|
||||
if(debugMode)
|
||||
std::cout << "\33[2K\r => INFO: Proxy:'" << sock5Proxy << "'" << std::endl;
|
||||
if(debugMode)
|
||||
std::cout << "\33[2K\r => INFO: Proxy for download:'" << sock5Proxy << "'" << std::endl;
|
||||
|
||||
if(cloudflare_protec) {
|
||||
if(debugMode)
|
||||
std::cout << "\33[2K\r => INFO: Proxy username for cloudflare :'" << torAnmeldeNamen << ":passwd" << "'" << std::endl;
|
||||
CURLcode setoptResult = curl_easy_setopt(curl_handle, CURLOPT_PROXYUSERPWD, (torAnmeldeNamen + ":passwd").c_str());
|
||||
if (setoptResult != CURLE_OK) {
|
||||
std::cerr << "Setting CURLOPT_URL failed: " << curl_easy_strerror(setoptResult) << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
if(debugMode)
|
||||
std::cout << "\33[2K\r => INFO: Es wird kein Proxy verwendet: ADDR of PM:" << this << " -> prox: " << sock5Proxy << std::endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//User Agent
|
||||
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0");
|
||||
@ -305,6 +330,10 @@ int PageManager::downLoadToFile(std::string filePath, std::string url)
|
||||
//Error 404, for example => not found
|
||||
curl_easy_setopt(curl_handle, CURLOPT_FAILONERROR, true);
|
||||
|
||||
//Against cloudflare!
|
||||
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L); //follows redirection
|
||||
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, USER_AGENT);
|
||||
|
||||
int maxTimeOut = 5;
|
||||
bool failed = false;
|
||||
for (int timeout = 1; timeout <= maxTimeOut; ++timeout) {
|
||||
@ -319,6 +348,7 @@ int PageManager::downLoadToFile(std::string filePath, std::string url)
|
||||
sleep(1);
|
||||
}
|
||||
} else {
|
||||
|
||||
//Sonst ( wenns functioniert) schleife verlassen
|
||||
break;
|
||||
}
|
||||
@ -330,6 +360,48 @@ int PageManager::downLoadToFile(std::string filePath, std::string url)
|
||||
return 4;
|
||||
}
|
||||
|
||||
|
||||
char *url_after;
|
||||
//Get Url
|
||||
res = curl_easy_getinfo(curl_handle, CURLINFO_EFFECTIVE_URL, &url_after);
|
||||
if( res != CURLE_OK || !curl_handle ) {
|
||||
perror((std::string("\33[2K\r => Error: curl_easy_getinfo failed: ") + curl_easy_strerror(res)).c_str());
|
||||
curl_easy_cleanup(curl_handle);
|
||||
return 12;
|
||||
} else if(url_after){
|
||||
|
||||
if(std::string(url_after).find("/_ray/pow") != std::string::npos) {
|
||||
std::cout << " \33[2K\r => CLOUD FLARE PROTECTION (Try " << rek_num << "/15)..." << std::flush;
|
||||
usleep(400000);
|
||||
|
||||
if(this->debugMode && std::string(url_after) != "ifconfig.me/ip") {
|
||||
std::string out_ip = this->getServerRequest("https://", "ifconfig.me/ip").html;
|
||||
|
||||
if(out_ip.find("<html>") == std::string::npos && [](const std::string& str) { return std::count(str.begin(), str.end(), '.'); }(out_ip) == 3)
|
||||
std::cout << "\33[2K\r -> Current IP: " << out_ip << std::endl;
|
||||
else
|
||||
std::cout << "\33[2K\r -> Current IP: " << "Unknown: " << std::endl;
|
||||
|
||||
}
|
||||
cloudflare_protec = true;
|
||||
generateNewTorAnmeldeNamen(torAnmeldeNamen);
|
||||
|
||||
return this->downLoadToFile(filePath, url, rek_num + 1);
|
||||
|
||||
// std::cout << "/_ray/pow:\n" << readBuffer << std::endl;
|
||||
// this->writeToFile( std::vector<std::string>{"./output.text"}, readBuffer );
|
||||
|
||||
// QWebEngineView view;
|
||||
// view.load(QUrl("https://qt-project.org/"));
|
||||
// view.resize(1024, 750);
|
||||
// view.show();
|
||||
|
||||
// qApp->exec();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* cleanup curl stuff */
|
||||
curl_easy_cleanup(curl_handle);
|
||||
|
||||
|
@ -24,6 +24,10 @@
|
||||
#include <mutex>
|
||||
|
||||
|
||||
|
||||
#define USER_AGENT "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
|
||||
|
||||
|
||||
struct Reply {
|
||||
Reply() {}
|
||||
Reply(std::string value_both) : html(value_both), url(value_both) {}
|
||||
@ -56,7 +60,7 @@ public:
|
||||
void get_terminal_size(int& width);
|
||||
|
||||
Reply getServerRequest(std::string protocol, std::string Url, bool useCookies = false, std::string data = "", bool generateCookieFile = false, bool UrlAfterRedirectOnlyNeeded = false, std::string cookieFilePath = "", int rek_num = 0);
|
||||
int downLoadToFile(std::string filePath, std::string url);
|
||||
int downLoadToFile(std::string filePath, std::string url, int rek_num = 0);
|
||||
|
||||
int login(PAGE page, Account account, std::string cookieFilePath);
|
||||
Reply getUrlAfterRedirect(std::string p, std::string Url, std::string cookieFilePath);
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
#define UpdaterCloudUrlWithPath "https://cloud.obermui.de/s/tXz7SWdaPJ7TacZ/download?path=%2F&files="
|
||||
#define SecondUpdaterCloudUrlWithPath "https://snew4.obermui.de/download?path=%2F&files="
|
||||
#define VERSION "6.1.0"
|
||||
#define VERSION "6.1.1"
|
||||
#define DEFAULT_FILE_VERSION "2.5"
|
||||
|
||||
//default, anime, normal,
|
||||
|
Loading…
Reference in New Issue
Block a user