Store headers as string lines
curl ultimately expects null-terminated strings and makes a copy of each, so it's pointless to mess around with string_views and stuff if I have to make a copy for curl at the end anyways.
This commit is contained in:
parent
bc6b20563b
commit
8b09d7da53
4 changed files with 14 additions and 10 deletions
|
@ -62,12 +62,11 @@ HttpResponse page_fetch (
|
|||
}
|
||||
easy.add<CURLOPT_ACCEPT_ENCODING>("gzip");
|
||||
easy.add<CURLOPT_HTTP_CONTENT_DECODING>(1L);
|
||||
easy.add<CURLOPT_VERBOSE>(0L);
|
||||
easy.add(curl_pair<CURLoption, std::string>(CURLOPT_USERAGENT, user_agent));
|
||||
|
||||
curl::curl_header ch;
|
||||
for (const auto& entry : headers) {
|
||||
ch.add(entry.first + ": " + entry.second);
|
||||
}
|
||||
ch.add(headers.begin(), headers.end());
|
||||
easy.add<CURLOPT_HTTPHEADER>(ch.get());
|
||||
|
||||
easy.perform();
|
||||
|
|
|
@ -21,11 +21,10 @@
|
|||
#include <string_view>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
|
||||
namespace nap {
|
||||
|
||||
typedef std::vector<std::pair<std::string, std::string>> PageFetchHeaders;
|
||||
typedef std::vector<std::string> PageFetchHeaders;
|
||||
|
||||
HttpResponse page_fetch (
|
||||
const std::string& url,
|
||||
|
|
|
@ -17,13 +17,20 @@
|
|||
|
||||
#include "quick_rest.hpp"
|
||||
#include "private/page_fetch.hpp"
|
||||
#include <cassert>
|
||||
|
||||
namespace nap {
|
||||
|
||||
void QuickRest::add_headers (std::initializer_list<HeaderPairView> headers) {
|
||||
m_header_lines.reserve(m_header_lines.size() + headers.size());
|
||||
|
||||
for (const auto& entry : headers) {
|
||||
using std::string;
|
||||
m_header.emplace_back(string(entry.first), string(entry.second));
|
||||
std::string line;
|
||||
line.reserve(entry.first.size() + 2 + entry.second.size());
|
||||
line.append(entry.first);
|
||||
line.append(": ");
|
||||
line.append(entry.second);
|
||||
m_header_lines.push_back(std::move(line));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,6 +39,6 @@ void QuickRest::set_user_agent (std::string&& name) {
|
|||
}
|
||||
|
||||
HttpResponse QuickRest::fetch (std::string_view url) {
|
||||
return page_fetch(std::string(url), m_user_agent, m_header);
|
||||
return page_fetch(std::string(url), m_user_agent, m_header_lines);
|
||||
}
|
||||
} //namespace nap
|
||||
|
|
|
@ -30,7 +30,6 @@ namespace nap {
|
|||
class QuickRest {
|
||||
public:
|
||||
typedef std::pair<std::string_view, std::string_view> HeaderPairView;
|
||||
typedef std::pair<std::string, std::string> HeaderPair;
|
||||
|
||||
QuickRest() = default;
|
||||
|
||||
|
@ -40,7 +39,7 @@ public:
|
|||
|
||||
private:
|
||||
std::string m_user_agent;
|
||||
std::vector<HeaderPair> m_header;
|
||||
std::vector<std::string> m_header_lines;
|
||||
};
|
||||
|
||||
} //namespace nap
|
||||
|
|
Loading…
Reference in a new issue