Mercurial > minori
diff src/core/http.cc @ 81:9b2b41f83a5e
boring: mass rename to cc
because this is a very unix-y project, it makes more sense to use the
'cc' extension
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Mon, 23 Oct 2023 12:07:27 -0400 |
parents | src/core/http.cpp@6f7385bd334c |
children | f5940a575d83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/core/http.cc Mon Oct 23 12:07:27 2023 -0400 @@ -0,0 +1,71 @@ +#include "core/http.h" +#include "core/session.h" +#include <QByteArray> +#include <QMessageBox> +#include <curl/curl.h> +#include <string> +#include <vector> + +namespace HTTP { + +static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userdata) { + reinterpret_cast<QByteArray*>(userdata)->append(reinterpret_cast<char*>(contents), size * nmemb); + return size * nmemb; +} + +QByteArray Get(std::string url, std::vector<std::string> headers) { + struct curl_slist* list = NULL; + QByteArray userdata; + + CURL* curl = curl_easy_init(); + if (curl) { + for (const std::string& h : headers) { + list = curl_slist_append(list, h.c_str()); + } + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &userdata); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &WriteCallback); + /* Use system certs... useful on Windows. */ + curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); + CURLcode res = curl_easy_perform(curl); + session.IncrementRequests(); + curl_easy_cleanup(curl); + if (res != CURLE_OK) { + QMessageBox box(QMessageBox::Icon::Critical, "", + QString("curl_easy_perform(curl) failed!: ") + QString(curl_easy_strerror(res))); + box.exec(); + } + } + return userdata; +} + +QByteArray Post(std::string url, std::string data, std::vector<std::string> headers) { + struct curl_slist* list = NULL; + QByteArray userdata; + + CURL* curl = curl_easy_init(); + if (curl) { + for (const std::string& h : headers) { + list = curl_slist_append(list, h.c_str()); + } + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str()); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &userdata); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &WriteCallback); + /* Use system certs... useful on Windows. */ + curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); + CURLcode res = curl_easy_perform(curl); + session.IncrementRequests(); + curl_easy_cleanup(curl); + if (res != CURLE_OK) { + QMessageBox box(QMessageBox::Icon::Critical, "", + QString("curl_easy_perform(curl) failed!: ") + QString(curl_easy_strerror(res))); + box.exec(); + } + } + return userdata; +} + +} // namespace HTTP