Refactor main.cpp to improve concurrency handling and streamline CURL setup
This commit is contained in:
75
main.cpp
75
main.cpp
@@ -1,38 +1,65 @@
|
|||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
size_t callback(char* ptr,size_t size,size_t nmemb,std::string* stream){
|
static const char* URL = "https://uibi-mu.click/uibi-mu";
|
||||||
size_t s=size*nmemb;
|
static const int CONCURRENCY = 10000;
|
||||||
stream->append(ptr,s);
|
|
||||||
return s;
|
size_t write_callback(char* ptr, size_t size, size_t nmemb, void* userdata) {
|
||||||
|
return size * nmemb;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(){
|
CURL* create_easy() {
|
||||||
const char url[] = "https://uibi-mu.click/uibi-mu";
|
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++) {
|
int main() {
|
||||||
CURL *curl;
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||||
CURLcode curlCode;
|
|
||||||
std::string res = "";
|
|
||||||
|
|
||||||
curl = curl_easy_init();
|
CURLM* multi = curl_multi_init();
|
||||||
if (curl == NULL) {
|
int still_running = 0;
|
||||||
std::cout << "curl error" << std::endl;
|
|
||||||
return 1;
|
for (int i = 0; i < CONCURRENCY; i++) {
|
||||||
|
CURL* easy = create_easy();
|
||||||
|
curl_multi_add_handle(multi, easy);
|
||||||
}
|
}
|
||||||
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);
|
|
||||||
|
|
||||||
curlCode = curl_easy_perform(curl);
|
curl_multi_perform(multi, &still_running);
|
||||||
curl_easy_cleanup(curl);
|
|
||||||
if (curlCode == CURLE_OK) {
|
while (still_running) {
|
||||||
std::cout << res << std::endl;
|
int numfds;
|
||||||
} else {
|
curl_multi_wait(multi, NULL, 0, 1000, &numfds);
|
||||||
std::cout << "curl error" << curlCode << std::endl;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user