159 lines
4.2 KiB
C++
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);
|
|
} |