httpClient.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "httpClient.h"
  2. httpClient::httpClient()
  3. {
  4. curl_global_init(CURL_GLOBAL_ALL);
  5. m_userAgents.push_back("Opera/9.80 (X11; Linux i686; U; en) Presto/2.7.62 Version/11.00");
  6. initialize_locks();
  7. }
  8. httpClient::~httpClient()
  9. {
  10. free_locks();
  11. curl_global_cleanup();
  12. }
  13. std::string httpClient::GetUrlContents(const std::string& url) const
  14. {
  15. std::string buffer;
  16. CURL* curl = curl_easy_init();
  17. curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
  18. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  19. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
  20. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
  21. curl_easy_setopt(curl, CURLOPT_USERAGENT, m_userAgents[rand() % m_userAgents.size()].c_str());
  22. curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
  23. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &WriteCallback);
  24. curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
  25. int code = 0;
  26. curl_easy_perform(curl);
  27. curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
  28. curl_easy_cleanup(curl);
  29. if (code != 200)
  30. {
  31. std::stringstream error;
  32. error << "Error encountered while retrieving " << url;
  33. throw std::runtime_error(error.str());
  34. }
  35. return buffer;
  36. }
  37. size_t httpClient::WriteCallback(char* data, size_t size, size_t nmemb, std::string* writerData)
  38. {
  39. if (writerData == NULL)
  40. return 0;
  41. writerData->append(data, size * nmemb);
  42. return size * nmemb;
  43. }