Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <functional>
- #include <curl/curl.h>
- using namespace std;
- static char errorBuffer[CURL_ERROR_SIZE];
- static string buffer;
- // This callback function gets called by libcurl as soon as there is data
- // received that needs to be saved. ptr points to the delivered data,
- // and the size of that data is size multiplied with nmemb.
- static int writer(char * ptr_data, size_t size, size_t nmemb, string * writerData)
- {
- if(writerData == NULL)
- return 0;
- size_t data_size = size * nmemb;
- writerData->append(ptr_data, data_size);
- return (int)data_size;
- }
- static bool init(CURL *& conn, const char * url)
- {
- CURLcode code;
- conn = curl_easy_init();
- if(conn == NULL)
- {
- fprintf(stderr, "Failed to create CURL connection\n");
- exit(EXIT_FAILURE);
- }
- code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to set error buffer [%d]\n", code);
- return false;
- }
- code = curl_easy_setopt(conn, CURLOPT_URL, url);
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to set URL [%s]\n", errorBuffer);
- return false;
- }
- code = curl_easy_setopt(conn, CURLOPT_SSL_VERIFYPEER, 1L);
- if(code != CURLE_OK)
- {
- fprintf(
- stderr, "Failed to set CURLOPT_SSL_VERIFYPEER [%s]\n", errorBuffer);
- return false;
- }
- code = curl_easy_setopt(conn, CURLOPT_COOKIEFILE, "");
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to set CURLOPT_COOKIEFILE [%s]\n", errorBuffer);
- return false;
- }
- code = curl_easy_setopt(conn, CURLOPT_FOLLOWLOCATION, 1L);
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to set redirect option [%s]\n", errorBuffer);
- return false;
- }
- auto callback = [](char * ptr_data, size_t size, size_t nmemb, string * writerData)
- ->size_t
- {
- if(writerData == NULL)
- return 0;
- size_t data_size = size * nmemb;
- writerData->append(ptr_data, data_size);
- return (int)data_size;
- };
- code = curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, callback);
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to set writer [%s]\n", errorBuffer);
- return false;
- }
- code = curl_easy_setopt(conn, CURLOPT_WRITEDATA, &buffer);
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to set write data [%s]\n", errorBuffer);
- return false;
- }
- return true;
- }
- int main(int argc, char * argv[])
- {
- CURL * conn = NULL;
- CURLcode code;
- code = curl_global_init(CURL_GLOBAL_DEFAULT);
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to init curl [%d]\n", code);
- return false;
- }
- // Initialize CURL connection
- if(!init(conn, "http://www.google.com/"))
- {
- fprintf(stderr, "Connection initializion failed\n");
- exit(EXIT_FAILURE);
- }
- // Retrieve content for the URL
- code = curl_easy_perform(conn);
- curl_easy_cleanup(conn);
- if(code != CURLE_OK)
- {
- fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer);
- exit(EXIT_FAILURE);
- }
- cout << buffer;
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement