|
|
|
#pragma once
|
|
|
|
#include "MString.h"
|
|
|
|
#include <curl/curl.h>
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
using michlib::MString;
|
|
|
|
|
|
|
|
class CURLRAIIDT
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// TODO: make static
|
|
|
|
void operator()(CURL* c) { curl_easy_cleanup(c); }
|
|
|
|
};
|
|
|
|
|
|
|
|
class CURLRAII: public std::unique_ptr<CURL, CURLRAIIDT>
|
|
|
|
{
|
|
|
|
char err[CURL_ERROR_SIZE];
|
|
|
|
|
|
|
|
public:
|
|
|
|
CURLRAII()
|
|
|
|
{
|
|
|
|
reset(curl_easy_init());
|
|
|
|
curl_easy_setopt(*this, CURLOPT_ERRORBUFFER, err);
|
|
|
|
}
|
|
|
|
operator CURL*() const { return get(); }
|
|
|
|
const char* Err() const { return err; }
|
|
|
|
};
|
|
|
|
|
|
|
|
// Curl writeback function, write to MString
|
|
|
|
size_t Write2String(char* ptr, size_t size, size_t n, void* data);
|
|
|
|
|
|
|
|
// Curl writeback function, write to file descriptor
|
|
|
|
size_t Write2File(char* ptr, size_t size, size_t n, void* data);
|
|
|
|
|
|
|
|
// Get content of url to MString
|
|
|
|
std::pair<MString, CURLcode> GetUrl(const CURLRAII& chandle, const MString& url);
|