2023-03-06 15:40:07 -05:00
|
|
|
#include "http.hpp"
|
|
|
|
#include "nt.hpp"
|
|
|
|
#include <atlcomcli.h>
|
|
|
|
|
2023-11-10 16:52:20 -05:00
|
|
|
namespace utilities::http
|
2023-03-06 15:40:07 -05:00
|
|
|
{
|
|
|
|
std::optional<std::string> get_data(const std::string& url)
|
|
|
|
{
|
|
|
|
CComPtr<IStream> stream;
|
|
|
|
|
|
|
|
if (FAILED(URLOpenBlockingStreamA(nullptr, url.data(), &stream, 0, nullptr)))
|
|
|
|
{
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
char buffer[0x1000];
|
|
|
|
std::string result;
|
|
|
|
|
|
|
|
HRESULT status{};
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
|
|
|
DWORD bytes_read = 0;
|
|
|
|
status = stream->Read(buffer, sizeof(buffer), &bytes_read);
|
|
|
|
|
|
|
|
if (bytes_read > 0)
|
|
|
|
{
|
|
|
|
result.append(buffer, bytes_read);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
while (SUCCEEDED(status) && status != S_FALSE);
|
|
|
|
|
|
|
|
if (FAILED(status))
|
|
|
|
{
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
return {result};
|
|
|
|
}
|
|
|
|
|
|
|
|
std::future<std::optional<std::string>> get_data_async(const std::string& url)
|
|
|
|
{
|
|
|
|
return std::async(std::launch::async, [url]()
|
|
|
|
{
|
|
|
|
return get_data(url);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|