Advertisement
Falven

curl_test

Apr 12th, 2015
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <functional>
  4. #include <curl/curl.h>
  5.  
  6. using namespace std;
  7.  
  8. static char errorBuffer[CURL_ERROR_SIZE];
  9. static string buffer;
  10.  
  11. // This callback function gets called by libcurl as soon as there is data
  12. // received that needs to be saved. ptr points to the delivered data,
  13. // and the size of that data is size multiplied with nmemb.
  14. static int writer(char * ptr_data, size_t size, size_t nmemb, string * writerData)
  15. {
  16.     if(writerData == NULL)
  17.         return 0;
  18.  
  19.     size_t data_size = size * nmemb;
  20.     writerData->append(ptr_data, data_size);
  21.  
  22.     return (int)data_size;
  23. }
  24.  
  25. static bool init(CURL *& conn, const char * url)
  26. {
  27.     CURLcode code;
  28.     conn = curl_easy_init();
  29.  
  30.     if(conn == NULL)
  31.     {
  32.         fprintf(stderr, "Failed to create CURL connection\n");
  33.  
  34.         exit(EXIT_FAILURE);
  35.     }
  36.  
  37.     code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
  38.     if(code != CURLE_OK)
  39.     {
  40.         fprintf(stderr, "Failed to set error buffer [%d]\n", code);
  41.  
  42.         return false;
  43.     }
  44.  
  45.     code = curl_easy_setopt(conn, CURLOPT_URL, url);
  46.     if(code != CURLE_OK)
  47.     {
  48.         fprintf(stderr, "Failed to set URL [%s]\n", errorBuffer);
  49.  
  50.         return false;
  51.     }
  52.  
  53.     code = curl_easy_setopt(conn, CURLOPT_SSL_VERIFYPEER, 1L);
  54.     if(code != CURLE_OK)
  55.     {
  56.         fprintf(
  57.             stderr, "Failed to set CURLOPT_SSL_VERIFYPEER [%s]\n", errorBuffer);
  58.  
  59.         return false;
  60.     }
  61.  
  62.     code = curl_easy_setopt(conn, CURLOPT_COOKIEFILE, "");
  63.     if(code != CURLE_OK)
  64.     {
  65.         fprintf(stderr, "Failed to set CURLOPT_COOKIEFILE [%s]\n", errorBuffer);
  66.  
  67.         return false;
  68.     }
  69.  
  70.     code = curl_easy_setopt(conn, CURLOPT_FOLLOWLOCATION, 1L);
  71.     if(code != CURLE_OK)
  72.     {
  73.         fprintf(stderr, "Failed to set redirect option [%s]\n", errorBuffer);
  74.  
  75.         return false;
  76.     }
  77.  
  78.     auto callback = [](char * ptr_data, size_t size, size_t nmemb, string * writerData)
  79.         ->size_t
  80.         {
  81.             if(writerData == NULL)
  82.                 return 0;
  83.             size_t data_size = size * nmemb;
  84.             writerData->append(ptr_data, data_size);
  85.             return (int)data_size;
  86.         };
  87.        
  88.     code = curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, callback);
  89.     if(code != CURLE_OK)
  90.     {
  91.         fprintf(stderr, "Failed to set writer [%s]\n", errorBuffer);
  92.  
  93.         return false;
  94.     }
  95.  
  96.     code = curl_easy_setopt(conn, CURLOPT_WRITEDATA, &buffer);
  97.     if(code != CURLE_OK)
  98.     {
  99.         fprintf(stderr, "Failed to set write data [%s]\n", errorBuffer);
  100.  
  101.         return false;
  102.     }
  103.  
  104.     return true;
  105. }
  106.  
  107. int main(int argc, char * argv[])
  108. {
  109.     CURL * conn = NULL;
  110.     CURLcode code;
  111.  
  112.     code = curl_global_init(CURL_GLOBAL_DEFAULT);
  113.     if(code != CURLE_OK)
  114.     {
  115.         fprintf(stderr, "Failed to init curl [%d]\n", code);
  116.  
  117.         return false;
  118.     }
  119.  
  120.     // Initialize CURL connection
  121.  
  122.     if(!init(conn, "http://www.google.com/"))
  123.     {
  124.         fprintf(stderr, "Connection initializion failed\n");
  125.  
  126.         exit(EXIT_FAILURE);
  127.     }
  128.  
  129.     // Retrieve content for the URL
  130.  
  131.     code = curl_easy_perform(conn);
  132.     curl_easy_cleanup(conn);
  133.  
  134.     if(code != CURLE_OK)
  135.     {
  136.         fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer);
  137.  
  138.         exit(EXIT_FAILURE);
  139.     }
  140.  
  141.     cout << buffer;
  142.  
  143.     return EXIT_SUCCESS;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement