Files
csgo2_tiny_server_plugin_sy…/csgo2/libcurl/libcurl.cpp
2023-10-09 16:41:40 +08:00

159 lines
4.2 KiB
C++

#include "libcurl.h"
CRITICAL_SECTION curl_critical;
size_t writer(char* data, size_t size, size_t nmemb, std::string* writer_data)
{
size_t sizes = size * nmemb;
if (NULL == writer_data) {
return 0;
}
writer_data->append(data, sizes);
return sizes;
}
bool curl_get(std::string url, std::string* pbuffer, curl_slist* headers, bool tls, bool proxy)
{
curl_code code;
curl_handle handle;
handle = curl_easy_init();
if (NULL == handle) {
return false;
}
code = curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writer);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_WRITEDATA, pbuffer);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
if (tls) {
code = curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, false);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, true);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
}
code = curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
if (proxy) {
curl_easy_setopt(handle, CURLOPT_PROXY, "127.0.0.1");
curl_easy_setopt(handle, CURLOPT_PROXYPORT, 7890);
curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
}
EnterCriticalSection(&curl_critical);
code = curl_easy_perform(handle);
LeaveCriticalSection(&curl_critical);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
curl_easy_cleanup(handle);
return true;
}
bool curl_post(std::string url, std::string* pbuffer, std::string data, curl_slist* headers, bool tls, bool proxy)
{
curl_code code;
curl_handle handle;
handle = curl_easy_init();
if (NULL == handle) {
return false;
}
code = curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writer);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_WRITEDATA, pbuffer);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
if (tls) {
code = curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, false);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, true);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
}
code = curl_easy_setopt(handle, CURLOPT_POST, true);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_POSTFIELDS, data.c_str());
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
code = curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
if (proxy) {
curl_easy_setopt(handle, CURLOPT_PROXY, "127.0.0.1");
curl_easy_setopt(handle, CURLOPT_PROXYPORT, 7890);
curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
}
EnterCriticalSection(&curl_critical);
code = curl_easy_perform(handle);
LeaveCriticalSection(&curl_critical);
if (code != CURLE_OK) {
curl_easy_cleanup(handle);
return false;
}
curl_easy_cleanup(handle);
return true;
}
void curl_init()
{
InitializeCriticalSection(&curl_critical);
curl_global_init(CURL_GLOBAL_DEFAULT);
}
void curl_cleanup()
{
curl_global_cleanup();
DeleteCriticalSection(&curl_critical);
}