Added proxy support
This commit is contained in:
parent
e01ce6b96f
commit
86a614dd61
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required (VERSION 3.7)
|
cmake_minimum_required (VERSION 3.7)
|
||||||
project (mastodon-cpp
|
project (mastodon-cpp
|
||||||
VERSION 0.14.0
|
VERSION 0.15.0
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/* This file is part of mastodon-cpp.
|
||||||
|
* This example shows how to use a proxy.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <cstdint>
|
||||||
|
#ifdef MASTODON_CPP
|
||||||
|
#include "mastodon-cpp.hpp"
|
||||||
|
#else
|
||||||
|
#include <mastodon-cpp/mastodon-cpp.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using std::cout;
|
||||||
|
using Mastodon::API;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc < 3)
|
||||||
|
{
|
||||||
|
std::cerr << "usage: " << argv[0] << " <instance> <access token>\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Mastodon::API masto(argv[1], argv[2]);
|
||||||
|
// SOCKS5 Proxy. Proxy resolves URL hostname.
|
||||||
|
masto.set_proxy("socks5h://[fd12::1a]:1080/");
|
||||||
|
// HTTPS proxy with username and password
|
||||||
|
masto.set_proxy("https://localhost:3128", "user5:supersecurepassword");
|
||||||
|
std::string answer;
|
||||||
|
std::uint16_t ret;
|
||||||
|
|
||||||
|
ret = masto.get(API::v1::accounts_verify_credentials, answer);
|
||||||
|
|
||||||
|
cout << "Return code: " << ret << '\n';
|
||||||
|
std::cout << answer << '\n';
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
17
src/http.cpp
17
src/http.cpp
|
@ -35,6 +35,8 @@ API::http::http(const API &api, const string &instance,
|
||||||
, _instance(instance)
|
, _instance(instance)
|
||||||
, _access_token(access_token)
|
, _access_token(access_token)
|
||||||
, _cancel_stream(false)
|
, _cancel_stream(false)
|
||||||
|
, _proxy("")
|
||||||
|
, _proxy_userpw("")
|
||||||
{
|
{
|
||||||
curlpp::initialize();
|
curlpp::initialize();
|
||||||
}
|
}
|
||||||
|
@ -70,6 +72,15 @@ const uint_fast16_t API::http::request(const method &meth,
|
||||||
ttdebug << "User-Agent: " << parent.get_useragent() << "\n";
|
ttdebug << "User-Agent: " << parent.get_useragent() << "\n";
|
||||||
request.setOpt<curlopts::UserAgent>(parent.get_useragent());
|
request.setOpt<curlopts::UserAgent>(parent.get_useragent());
|
||||||
|
|
||||||
|
if (!_proxy.empty())
|
||||||
|
{
|
||||||
|
request.setOpt<curlopts::Proxy>(_proxy);
|
||||||
|
if (!_proxy_userpw.empty())
|
||||||
|
{
|
||||||
|
request.setOpt<curlopts::ProxyUserPwd>(_proxy_userpw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!_access_token.empty())
|
if (!_access_token.empty())
|
||||||
{
|
{
|
||||||
headers.push_back("Authorization: Bearer " + _access_token);
|
headers.push_back("Authorization: Bearer " + _access_token);
|
||||||
|
@ -217,3 +228,9 @@ std::mutex &API::http::get_mutex()
|
||||||
{
|
{
|
||||||
return _mutex;
|
return _mutex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const void API::http::set_proxy(const string &proxy, const string &userpw)
|
||||||
|
{
|
||||||
|
_proxy = proxy;
|
||||||
|
_proxy_userpw = userpw;
|
||||||
|
}
|
||||||
|
|
|
@ -571,3 +571,8 @@ const string API::unescape_html(const string &html)
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const void API::set_proxy(const string &proxy, const string &userpw)
|
||||||
|
{
|
||||||
|
_http.set_proxy(proxy, userpw);
|
||||||
|
}
|
||||||
|
|
|
@ -146,6 +146,16 @@ public:
|
||||||
*/
|
*/
|
||||||
std::mutex &get_mutex();
|
std::mutex &get_mutex();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Sets the proxy.
|
||||||
|
*
|
||||||
|
* @param proxy See `man 3 CURLOPT_PROXY`
|
||||||
|
* @param userpw See `man 3 CURLOPT_PROXYUSERPWD` (optional)
|
||||||
|
*
|
||||||
|
* @since 0.15.0
|
||||||
|
*/
|
||||||
|
const void set_proxy(const string &proxy, const string &userpw = "");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const API &parent;
|
const API &parent;
|
||||||
const string _instance;
|
const string _instance;
|
||||||
|
@ -153,6 +163,8 @@ public:
|
||||||
string _headers;
|
string _headers;
|
||||||
bool _cancel_stream;
|
bool _cancel_stream;
|
||||||
std::mutex _mutex;
|
std::mutex _mutex;
|
||||||
|
string _proxy;
|
||||||
|
string _proxy_userpw;
|
||||||
|
|
||||||
const size_t callback_write(char* data, size_t size, size_t nmemb,
|
const size_t callback_write(char* data, size_t size, size_t nmemb,
|
||||||
string *oss);
|
string *oss);
|
||||||
|
@ -395,6 +407,13 @@ public:
|
||||||
*/
|
*/
|
||||||
static const string unescape_html(const string &html);
|
static const string unescape_html(const string &html);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Calls Mastodon::API::http::set_proxy()
|
||||||
|
*
|
||||||
|
* @since 0.15.0
|
||||||
|
*/
|
||||||
|
const void set_proxy(const string &proxy, const string &userpw = "");
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Make a GET request which doesn't require parameters.
|
* @brief Make a GET request which doesn't require parameters.
|
||||||
*
|
*
|
||||||
|
|
Reference in New Issue