NASFAQ/connections/http/http_connector.cpp
2022-05-07 17:02:21 +02:00

172 lines
4.9 KiB
C++

#include "http_connector.h"
namespace nsfq_http {
namespace http_connector {
/**
Make curl return strings instead of curl objects.
*/
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
connector::connector() {
m_hdl = curl_easy_init();
m_uri = "";
m_response = "N/A";
m_read_buffer = "";
/* Basic buffers and functions. */
curl_easy_setopt(m_hdl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(m_hdl, CURLOPT_WRITEDATA, &m_read_buffer);
curl_easy_getinfo(m_hdl, CURLINFO_RESPONSE_CODE, &m_http_code);
/* Header definition. TODO: cookie should be handled safely? */
m_slist1 = NULL;
m_slist1 = curl_slist_append(m_slist1 , "Cookie: holosesh=s%3AxmS8xBlQk4kH_rXQOaNjHk_3OuaBDsfA.M0yi%2BZmkiq%2BAmJBRj%2FNg9S%2BaSQpsfHRJcEeYVHLiKXg");
m_slist1 = curl_slist_append(m_slist1, "referer : https://nasfaq.biz/market");
curl_easy_setopt(m_hdl, CURLOPT_HTTPHEADER, m_slist1);
}
connector::~connector() {
curl_easy_cleanup(m_hdl);
}
void connector::set_uri(std::string uri) {
/* TODO: check for url sanity. */
m_uri = uri;
curl_easy_setopt(m_hdl, CURLOPT_URL, m_uri.c_str());
}
int connector::perform_request() {
m_result = curl_easy_perform(m_hdl);
if (m_result == CURLE_OK) {
return 0;
}else {
return -1;
}
}
void connector::clear_buffer() {
m_read_buffer = "";
}
void connector::get(std::string url) {
clear_buffer();
set_uri(url);
curl_easy_setopt(m_hdl, CURLOPT_CUSTOMREQUEST, "GET");
if(perform_request() == -1) {
std::cout << "> Error occured during GET with url " << m_uri
<< " CURLcode: " << curl_easy_strerror(m_result)
<< " HTTP response: " << m_http_code << std::endl;
};
}
void connector::post(std::string url, std::string payload) {
clear_buffer();
set_uri(url);
curl_easy_setopt(m_hdl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(m_hdl, CURLOPT_POSTFIELDS, payload.c_str());
if(perform_request() == -1) {
std::cout << "> Error occured during POST with url " << m_uri
<< " Payload: " << payload
<< " CURLcode: " << curl_easy_strerror(m_result)
<< " HTTP response: " << m_http_code << std::endl;
};
}
std::string connector::get_buffer() const {
return m_read_buffer;
}
//class http_connector {
//public:
// http_connector() {
// m_hdl = curl_easy_init();
// m_uri = "";
// m_response = "N/A";
// m_read_buffer = "";
//
// /* Basic buffers and functions. */
// curl_easy_setopt(m_hdl, CURLOPT_WRITEFUNCTION, WriteCallback);
// curl_easy_setopt(m_hdl, CURLOPT_WRITEDATA, &m_read_buffer);
// curl_easy_getinfo(m_hdl, CURLINFO_RESPONSE_CODE, &m_http_code);
//
// /* Header definition. TODO: cookie should be handled safely? */
// m_slist1 = NULL;
// m_slist1 = curl_slist_append(m_slist1 , "Cookie: holosesh=s%3AxmS8xBlQk4kH_rXQOaNjHk_3OuaBDsfA.M0yi%2BZmkiq%2BAmJBRj%2FNg9S%2BaSQpsfHRJcEeYVHLiKXg");
// m_slist1 = curl_slist_append(m_slist1, "referer : https://nasfaq.biz/market");
// curl_easy_setopt(m_hdl, CURLOPT_HTTPHEADER, m_slist1);
// }
//
// ~http_connector() {
// curl_easy_cleanup(m_hdl);
// }
//
// void set_uri(std::string uri) {
// /* TODO: check for url sanity. */
// m_uri = uri;
// curl_easy_setopt(m_hdl, CURLOPT_URL, m_uri.c_str());
// }
//
// int perform_request() {
// m_result = curl_easy_perform(m_hdl);
//
// if (m_result == CURLE_OK) {
// return 0;
// }else {
// return -1;
// }
// }
//
// void clear_buffer() {
// m_read_buffer = "";
// }
//
// void get(std::string url) {
// clear_buffer();
// set_uri(url);
// curl_easy_setopt(m_hdl, CURLOPT_CUSTOMREQUEST, "GET");
//
// if(perform_request() == -1) {
// std::cout << "> Error occured during GET with url " << m_uri
// << " CURLcode: " << curl_easy_strerror(m_result)
// << " HTTP response: " << m_http_code << std::endl;
// };
// }
//
// void post(std::string url, std::string payload) {
// clear_buffer();
// set_uri(url);
// curl_easy_setopt(m_hdl, CURLOPT_CUSTOMREQUEST, "POST");
// curl_easy_setopt(m_hdl, CURLOPT_POSTFIELDS, payload.c_str());
//
// if(perform_request() == -1) {
// std::cout << "> Error occured during POST with url " << m_uri
// << " Payload: " << payload
// << " CURLcode: " << curl_easy_strerror(m_result)
// << " HTTP response: " << m_http_code << std::endl;
// };
// }
//
// std::string get_buffer() const {
// return m_read_buffer;
// }
//private:
// int m_id;
// std::string m_uri;
// struct curl_slist *m_slist1;
// CURL *m_hdl;
// CURLcode m_result;
// long m_http_code;
// std::string m_response;
// std::string m_read_buffer;
//};
}
}