From 74e98211a7ab88d86f483f2169fb3a4a81a1e5a7 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Sat, 29 Aug 2020 14:28:47 +0100 Subject: [PATCH] Start working on QuickRest --- src/meson.build | 1 + src/nap/http_response.hpp | 36 ++++++++++++++++++++++++++ src/nap/page_fetch.cpp | 9 ++++--- src/nap/private/page_fetch.hpp | 18 +++++-------- src/nap/quick_rest.cpp | 37 +++++++++++++++++++++++++++ src/nap/quick_rest.hpp | 46 ++++++++++++++++++++++++++++++++++ 6 files changed, 132 insertions(+), 15 deletions(-) create mode 100644 src/nap/http_response.hpp create mode 100644 src/nap/quick_rest.cpp create mode 100644 src/nap/quick_rest.hpp diff --git a/src/meson.build b/src/meson.build index 6799f33..3856309 100644 --- a/src/meson.build +++ b/src/meson.build @@ -105,6 +105,7 @@ executable(meson.project_name(), 'oro/originsdb.cpp', 'nap/page_fetch.cpp', 'nap/http_header_parse.cpp', + 'nap/quick_rest.cpp', project_config_file, install: true, dependencies: lib_deps, diff --git a/src/nap/http_response.hpp b/src/nap/http_response.hpp new file mode 100644 index 0000000..3859ab6 --- /dev/null +++ b/src/nap/http_response.hpp @@ -0,0 +1,36 @@ +/* Copyright 2020, Michele Santullo + * This file is part of orotool. + * + * Orotool is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Orotool is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Orotool. If not, see . + */ + +#pragma once + +#include +#include +#include +#include + +namespace nap { + +struct HttpResponse { + std::string raw; + std::vector> header; + std::string_view body; + std::string_view http_ver; + std::string_view code_desc; + unsigned int code; +}; + +} //namespace nap diff --git a/src/nap/page_fetch.cpp b/src/nap/page_fetch.cpp index 4e4a51c..ab64e1c 100644 --- a/src/nap/page_fetch.cpp +++ b/src/nap/page_fetch.cpp @@ -36,7 +36,10 @@ namespace { } } //unnamed namespace -HttpResponse page_fetch (std::string_view url, std::string_view user_agent) { +HttpResponse page_fetch ( + const std::string& url, + const std::string& user_agent +) { using curl::curl_pair; std::ostringstream body_oss; @@ -49,7 +52,7 @@ HttpResponse page_fetch (std::string_view url, std::string_view user_agent) { easy.add(header.get_stream()); easy.add(body.get_stream()); - easy.add(curl_pair(CURLOPT_URL, std::string(url))); + easy.add(curl_pair(CURLOPT_URL, url)); easy.add(1L); if (is_https(url)) { easy.add(true); @@ -57,7 +60,7 @@ HttpResponse page_fetch (std::string_view url, std::string_view user_agent) { } easy.add("gzip"); easy.add(1L); - easy.add(curl_pair(CURLOPT_USERAGENT, std::string(user_agent))); + easy.add(curl_pair(CURLOPT_USERAGENT, user_agent)); easy.perform(); diff --git a/src/nap/private/page_fetch.hpp b/src/nap/private/page_fetch.hpp index 990fb32..66312ad 100644 --- a/src/nap/private/page_fetch.hpp +++ b/src/nap/private/page_fetch.hpp @@ -17,20 +17,14 @@ #pragma once -#include +#include "nap/http_response.hpp" #include -#include -#include namespace nap { -struct HttpResponse { - std::string raw; - std::vector> header; - std::string_view body; - std::string_view http_ver; - std::string_view code_desc; - unsigned int code; -}; -HttpResponse page_fetch (std::string_view url, std::string_view user_agent); +HttpResponse page_fetch ( + const std::string& url, + const std::string& user_agent +); + } //namespace nap diff --git a/src/nap/quick_rest.cpp b/src/nap/quick_rest.cpp new file mode 100644 index 0000000..3a4d511 --- /dev/null +++ b/src/nap/quick_rest.cpp @@ -0,0 +1,37 @@ +/* Copyright 2020, Michele Santullo + * This file is part of orotool. + * + * Orotool is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Orotool is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Orotool. If not, see . + */ + +#include "quick_rest.hpp" +#include "private/page_fetch.hpp" + +namespace nap { + +void QuickRest::add_headers (std::initializer_list headers) { + for (const auto& entry : headers) { + using std::string; + m_header.emplace_back(string(entry.first), string(entry.second)); + } +} + +void QuickRest::set_user_agent (std::string&& name) { + m_user_agent = std::move(name); +} + +HttpResponse QuickRest::fetch (std::string_view url) { + return page_fetch(std::string(url), m_user_agent); +} +} //namespace nap diff --git a/src/nap/quick_rest.hpp b/src/nap/quick_rest.hpp new file mode 100644 index 0000000..2c7fa0e --- /dev/null +++ b/src/nap/quick_rest.hpp @@ -0,0 +1,46 @@ +/* Copyright 2020, Michele Santullo + * This file is part of orotool. + * + * Orotool is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Orotool is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Orotool. If not, see . + */ + +#pragma once + +#include "http_response.hpp" +#include +#include +#include +#include +#include +#include + +namespace nap { + +class QuickRest { +public: + typedef std::pair HeaderPairView; + typedef std::pair HeaderPair; + + QuickRest() = default; + + void add_headers (std::initializer_list headers); + void set_user_agent (std::string&& name); + HttpResponse fetch (std::string_view url); + +private: + std::string m_user_agent; + std::vector m_header; +}; + +} //namespace nap