Refactor main.cpp to improve concurrency handling and streamline CURL setup
This commit is contained in:
77
main.cpp
77
main.cpp
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user