Ai explicatii in cod. struct MemStr // structura ce stocheaza datele citite de la site { string mem; size_t marime; }; static size_t WriteMemStr(void* contents, size_t size, size_t nmemb, void* userp) // functia ce face citirea de la site { size_t realsize = size * nmemb; struct MemStr* mem = (struct MemStr*)userp; mem->mem.append((char*)contents, realsize); mem->marime += realsize; //cout << "contents: " << contents << endl << "mem->mem: " << mem->mem << endl; //cout << "marime mem.mem: " << mem->mem.size() << endl; if(mem->mem.size() == mem->marime) { return realsize; } else { return 0; } } int main() { std::ifstream fLinkuri("linkuri.txt"); // fisierul din care citesti link-urile(modifici numele fisierului) std::ifstream fProxy("proxyuri.txt"); // fisier in care ai proxy-urile if(!fLinkuri.is_open() || !fProxy.is_open()) // te asiguri ca ai deschis fisierele { cout << "Eroare la deschidere fisiere."; return 0; } CURL* curl = curl_easy_init(); // initializare curl if(!curl) { cout << "Eroare initializare curl: "; return 0; } std::string link; // citesti link in el std::string proxy; // citesti proxy in el int contor = 0; // pentru a schimba proxi-ul MemStr mem; // in mare parte nefolosita, totusi dupa fiecare executie a curl, in mem.memorie ai pagina din link-ul accesat mem.marime = 0; while(std::getline(fLinkuri, link)) { if(contor == 0) { std::getline(fProxy, proxy); } curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemStr); // functia executata pentru citirea datelor primite de la site curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&mem); // variabila in care se salveaza datele curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10); curl_easy_setopt(curl, CURLOPT_URL, link.c_str()); // setam url-ul curl_easy_setopt(curl, CURLOPT_PROXY, proxy.c_str()); // setam link-ul proxy-ului curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // http://curl.haxx.se/libcurl/c/CURLOPT_PROXYTYPE.html alegi din descriere tipul de proxy pe care il poti folosi CURLcode retCode = curl_easy_perform(curl); // executam if(retCode != CURLE_OK) // verificam daca s-a executat cu succes { cout << "Eroare la executare curl: " << curl_easy_strerror(retCode); // afisam eroare daca e cazul } contor++; // incrementam contorul if(contor == 10) // il resetam daca au trecut 10 iterari { contor = 0; } mem.mem.clear(); // golim memoria variabilei in care stocam pagina mem.marime = 0; // setam marimea memoriei la 0(daca uiti sa faci asta, o sa primesti erori } return 0; }