Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio>
- #include <stdlib>
- #include <string.h>
- #include <curl/curl.h>
- //Asjade salvestamiseks ja edasiseks kasutamiseks loodud structure.
- struct MemoryStructure {
- char* mem;
- size_t size;
- }
- //See jätab compilerile märke, et selline funktsioon on olemas.
- static size_t WriteMemoryCallback(void* contents, size_t size, size_t nmemb, char* userp);
- int main(int argc, char[] *argv)
- {
- CURL *c_handle; // Vastutab http requesti eest.
- CURLcode res;
- struct MemoryStructure chunk; // \
- // |- Edasiseks kasutuseks vajalikud lisad.
- chunk.memory = malloc(1); // | Nendesse salvestatakse lehe sisu edasiseks kasutamiseks vajalikud andmed.
- chunk.size = 0; // /
- curl_global_init(CURL_GLOBAL_ALL);
- c_handle = curl_easy_init();
- //argv[0] on see osa, mis tuleb esimesena pärast .exe.
- curl_easy_setopt(c_handle, CURLOPT_URL, "http://foo.bar/latest?" + argv[0]);
- //Lisab meie CURL handlele ülesande, kasutada salvestamiseks meie WriteMemortCallback(void*, size_t, size_t, char*) funktsiooni.
- //See on vajalik, et mitte saada Windows süsteemidel crashi. Muidu põhjustaks CURLOPT_WRITEDATA crashi.
- curl_easy_setopt(c_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- //Paneb salvestama infot meie mälustruktuuri.
- curl_easy_setopt(c_handle, CURLOPT_WRITEDATA, (void *)&chunk);
- res = curl_easy_perform(c_handle);
- if(res != CURLE_OK)
- {
- printf("Viga requestis, ei tulnud eriti v2lja...\n");
- }
- else
- {
- /*
- * Niisiis, nüüd oleme jõudnud kohta, kus meil on olemas chunk.mem sisuga
- * ja chunk.size selle suurusega byte arvestuses. Mis me teeme?
- * Kontrollime, kas on tühi, ehk on '\0' või teisisõnu 'null terminator'.
- * Seda võib ka hiljem muuta mingiks kombinatsiooniks või sõnaks.
- */
- if(!chunk.memory) // Võrdub if(chunk.memory != '\0'), C-s on null või tühjus tõlgendatav eiks.
- {
- //On olemas uuem versioon! Saab hakata sellega tegelema.
- //Vat siin pani mõistus kokku...
- }
- }
- curl_easy_cleanup(c_handle); //Puhastab ja eemaldab kõik mälu kasututsed. Vajalik, et mitte saada erroreid.
- return 0;
- }
- static size_t WriteMemoryCallback(void* contents, size_t size, size_t nmemb, char* userp)
- {
- size_t realsize = size * nmemb;
- struct MemoryStruct *mem = (struct MemoryStruct *)userp;
- mem->memory = realloc(mem->memory, mem->size + realsize + 1);
- if(mem->memory == NULL)
- {
- /*
- * Pole mälu!
- * Anname error koodi 5.
- */
- return 5;
- }
- memcpy(&(mem->memory[mem->size]), contents, realsize);
- mem->size += realsize;
- mem->memory[mem->size] = 0;
- return realsize;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement