mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-27 11:17:49 +02:00
extract https content
This commit is contained in:
parent
71dae29077
commit
0d468a8f48
4 changed files with 54 additions and 41 deletions
73
util.cpp
73
util.cpp
|
@ -242,40 +242,8 @@ namespace http
|
|||
// User-Agent is needed to get the server list routerInfo files.
|
||||
site << "GET " << u.path_ << " HTTP/1.1\r\nHost: " << u.host_
|
||||
<< "\r\nAccept: */*\r\n" << "User-Agent: Wget/1.11.4\r\n" << "Connection: close\r\n\r\n";
|
||||
// read response
|
||||
std::string version, statusMessage;
|
||||
site >> version; // HTTP version
|
||||
int status;
|
||||
site >> status; // status
|
||||
std::getline (site, statusMessage);
|
||||
if (status == 200) // OK
|
||||
{
|
||||
bool isChunked = false;
|
||||
std::string header;
|
||||
while (!site.eof () && header != "\r")
|
||||
{
|
||||
std::getline(site, header);
|
||||
auto colon = header.find (':');
|
||||
if (colon != std::string::npos)
|
||||
{
|
||||
std::string field = header.substr (0, colon);
|
||||
if (field == i2p::util::http::TRANSFER_ENCODING)
|
||||
isChunked = (header.find ("chunked", colon + 1) != std::string::npos);
|
||||
}
|
||||
}
|
||||
|
||||
std::stringstream ss;
|
||||
if (isChunked)
|
||||
MergeChunkedResponse (site, ss);
|
||||
else
|
||||
ss << site.rdbuf();
|
||||
return ss.str();
|
||||
}
|
||||
else
|
||||
{
|
||||
LogPrint ("HTTP response ", status);
|
||||
return "";
|
||||
}
|
||||
// read response and extract content
|
||||
return GetHttpContent (site);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -290,6 +258,43 @@ namespace http
|
|||
}
|
||||
}
|
||||
|
||||
std::string GetHttpContent (std::istream& response)
|
||||
{
|
||||
std::string version, statusMessage;
|
||||
response >> version; // HTTP version
|
||||
int status;
|
||||
response >> status; // status
|
||||
std::getline (response, statusMessage);
|
||||
if (status == 200) // OK
|
||||
{
|
||||
bool isChunked = false;
|
||||
std::string header;
|
||||
while (!response.eof () && header != "\r")
|
||||
{
|
||||
std::getline(response, header);
|
||||
auto colon = header.find (':');
|
||||
if (colon != std::string::npos)
|
||||
{
|
||||
std::string field = header.substr (0, colon);
|
||||
if (field == i2p::util::http::TRANSFER_ENCODING)
|
||||
isChunked = (header.find ("chunked", colon + 1) != std::string::npos);
|
||||
}
|
||||
}
|
||||
|
||||
std::stringstream ss;
|
||||
if (isChunked)
|
||||
MergeChunkedResponse (response, ss);
|
||||
else
|
||||
ss << response.rdbuf();
|
||||
return ss.str();
|
||||
}
|
||||
else
|
||||
{
|
||||
LogPrint ("HTTP response ", status);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
void MergeChunkedResponse (std::istream& response, std::ostream& merged)
|
||||
{
|
||||
while (!response.eof ())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue