Allow to query HTTP headers

This commit is contained in:
Robin Gareus 2016-09-16 01:39:04 +02:00
parent 4042c234b1
commit 0996656ecc
2 changed files with 26 additions and 0 deletions

View File

@ -105,6 +105,22 @@ WriteMemoryCallback (void *ptr, size_t size, size_t nmemb, void *data) {
return realsize;
}
static size_t headerCallback (char* ptr, size_t size, size_t nmemb, void* data)
{
size_t realsize = size * nmemb;
struct HttpGet::HeaderInfo *nfo = (struct HttpGet::HeaderInfo*)data;
std::string header (static_cast<const char*>(ptr), realsize);
std::string::size_type index = header.find (':', 0);
if (index != std::string::npos) {
std::string k = header.substr (0, index);
std::string v = header.substr (index + 2);
k.erase(k.find_last_not_of (" \n\r\t")+1);
v.erase(v.find_last_not_of (" \n\r\t")+1);
nfo->h[k] = v;
}
return realsize;
}
HttpGet::HttpGet (bool p, bool ssl)
: persist (p)
@ -116,6 +132,8 @@ HttpGet::HttpGet (bool p, bool ssl)
curl_easy_setopt (_curl, CURLOPT_WRITEDATA, (void *)&mem);
curl_easy_setopt (_curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt (_curl, CURLOPT_HEADERDATA, (void *)&nfo);
curl_easy_setopt (_curl, CURLOPT_HEADERFUNCTION, headerCallback);
curl_easy_setopt (_curl, CURLOPT_USERAGENT, PROGRAM_NAME VERSIONSTRING);
curl_easy_setopt (_curl, CURLOPT_TIMEOUT, ARDOUR_CURL_TIMEOUT);
curl_easy_setopt (_curl, CURLOPT_NOSIGNAL, 1);

View File

@ -21,6 +21,7 @@
#include <curl/curl.h>
#include <string>
#include <map>
namespace ArdourCurl {
@ -35,6 +36,10 @@ class HttpGet {
size_t size;
};
struct HeaderInfo {
std::map<std::string, std::string> h;
};
char* get (const char* url);
std::string get (const std::string& url) {
@ -47,6 +52,8 @@ class HttpGet {
long int status () const { return _status; }
std::map<std::string, std::string> header () const { return nfo.h; }
char* escape (const char* s, int l) const {
return curl_easy_escape (_curl, s, l);
}
@ -76,6 +83,7 @@ class HttpGet {
char error_buffer[CURL_ERROR_SIZE];
struct MemStruct mem;
struct HeaderInfo nfo;
static const char* ca_path;
static const char* ca_info;