HttpResponse is a struct, not a tuple 🉐
This commit is contained in:
parent
a35cbdfb7c
commit
2b111e8352
@ -54,9 +54,9 @@ namespace ix
|
|||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "Cannot parse url: " << url;
|
ss << "Cannot parse url: " << url;
|
||||||
return std::make_tuple(code, HttpErrorCode::UrlMalformed,
|
return HttpResponse(code, HttpErrorCode::UrlMalformed,
|
||||||
headers, payload, ss.str(),
|
headers, payload, ss.str(),
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tls = protocol == "https";
|
bool tls = protocol == "https";
|
||||||
@ -65,9 +65,9 @@ namespace ix
|
|||||||
|
|
||||||
if (!_socket)
|
if (!_socket)
|
||||||
{
|
{
|
||||||
return std::make_tuple(code, HttpErrorCode::CannotCreateSocket,
|
return HttpResponse(code, HttpErrorCode::CannotCreateSocket,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build request string
|
// Build request string
|
||||||
@ -128,9 +128,9 @@ namespace ix
|
|||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "Cannot connect to url: " << url << " / error : " << errMsg;
|
ss << "Cannot connect to url: " << url << " / error : " << errMsg;
|
||||||
return std::make_tuple(code, HttpErrorCode::CannotConnect,
|
return HttpResponse(code, HttpErrorCode::CannotConnect,
|
||||||
headers, payload, ss.str(),
|
headers, payload, ss.str(),
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make a new cancellation object dealing with transfer timeout
|
// Make a new cancellation object dealing with transfer timeout
|
||||||
@ -154,9 +154,9 @@ namespace ix
|
|||||||
if (!_socket->writeBytes(req, isCancellationRequested))
|
if (!_socket->writeBytes(req, isCancellationRequested))
|
||||||
{
|
{
|
||||||
std::string errorMsg("Cannot send request");
|
std::string errorMsg("Cannot send request");
|
||||||
return std::make_tuple(code, HttpErrorCode::SendError,
|
return HttpResponse(code, HttpErrorCode::SendError,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadSize = req.size();
|
uploadSize = req.size();
|
||||||
@ -168,9 +168,9 @@ namespace ix
|
|||||||
if (!lineValid)
|
if (!lineValid)
|
||||||
{
|
{
|
||||||
std::string errorMsg("Cannot retrieve status line");
|
std::string errorMsg("Cannot retrieve status line");
|
||||||
return std::make_tuple(code, HttpErrorCode::CannotReadStatusLine,
|
return HttpResponse(code, HttpErrorCode::CannotReadStatusLine,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.verbose)
|
if (args.verbose)
|
||||||
@ -183,9 +183,9 @@ namespace ix
|
|||||||
if (sscanf(line.c_str(), "HTTP/1.1 %d", &code) != 1)
|
if (sscanf(line.c_str(), "HTTP/1.1 %d", &code) != 1)
|
||||||
{
|
{
|
||||||
std::string errorMsg("Cannot parse response code from status line");
|
std::string errorMsg("Cannot parse response code from status line");
|
||||||
return std::make_tuple(code, HttpErrorCode::MissingStatus,
|
return HttpResponse(code, HttpErrorCode::MissingStatus,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result = parseHttpHeaders(_socket, isCancellationRequested);
|
auto result = parseHttpHeaders(_socket, isCancellationRequested);
|
||||||
@ -195,9 +195,9 @@ namespace ix
|
|||||||
if (!headersValid)
|
if (!headersValid)
|
||||||
{
|
{
|
||||||
std::string errorMsg("Cannot parse http headers");
|
std::string errorMsg("Cannot parse http headers");
|
||||||
return std::make_tuple(code, HttpErrorCode::HeaderParsingError,
|
return HttpResponse(code, HttpErrorCode::HeaderParsingError,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Redirect ?
|
// Redirect ?
|
||||||
@ -206,18 +206,18 @@ namespace ix
|
|||||||
if (headers.find("Location") == headers.end())
|
if (headers.find("Location") == headers.end())
|
||||||
{
|
{
|
||||||
std::string errorMsg("Missing location header for redirect");
|
std::string errorMsg("Missing location header for redirect");
|
||||||
return std::make_tuple(code, HttpErrorCode::MissingLocation,
|
return HttpResponse(code, HttpErrorCode::MissingLocation,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (redirects >= args.maxRedirects)
|
if (redirects >= args.maxRedirects)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "Too many redirects: " << redirects;
|
ss << "Too many redirects: " << redirects;
|
||||||
return std::make_tuple(code, HttpErrorCode::TooManyRedirects,
|
return HttpResponse(code, HttpErrorCode::TooManyRedirects,
|
||||||
headers, payload, ss.str(),
|
headers, payload, ss.str(),
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recurse
|
// Recurse
|
||||||
@ -227,9 +227,9 @@ namespace ix
|
|||||||
|
|
||||||
if (verb == "HEAD")
|
if (verb == "HEAD")
|
||||||
{
|
{
|
||||||
return std::make_tuple(code, HttpErrorCode::Ok,
|
return HttpResponse(code, HttpErrorCode::Ok,
|
||||||
headers, payload, std::string(),
|
headers, payload, std::string(),
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse response:
|
// Parse response:
|
||||||
@ -248,9 +248,9 @@ namespace ix
|
|||||||
if (!chunkResult.first)
|
if (!chunkResult.first)
|
||||||
{
|
{
|
||||||
errorMsg = "Cannot read chunk";
|
errorMsg = "Cannot read chunk";
|
||||||
return std::make_tuple(code, HttpErrorCode::ChunkReadError,
|
return HttpResponse(code, HttpErrorCode::ChunkReadError,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
payload += chunkResult.second;
|
payload += chunkResult.second;
|
||||||
}
|
}
|
||||||
@ -266,9 +266,9 @@ namespace ix
|
|||||||
|
|
||||||
if (!lineResult.first)
|
if (!lineResult.first)
|
||||||
{
|
{
|
||||||
return std::make_tuple(code, HttpErrorCode::ChunkReadError,
|
return HttpResponse(code, HttpErrorCode::ChunkReadError,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t chunkSize;
|
uint64_t chunkSize;
|
||||||
@ -293,9 +293,9 @@ namespace ix
|
|||||||
if (!chunkResult.first)
|
if (!chunkResult.first)
|
||||||
{
|
{
|
||||||
errorMsg = "Cannot read chunk";
|
errorMsg = "Cannot read chunk";
|
||||||
return std::make_tuple(code, HttpErrorCode::ChunkReadError,
|
return HttpResponse(code, HttpErrorCode::ChunkReadError,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
payload += chunkResult.second;
|
payload += chunkResult.second;
|
||||||
|
|
||||||
@ -304,9 +304,9 @@ namespace ix
|
|||||||
|
|
||||||
if (!lineResult.first)
|
if (!lineResult.first)
|
||||||
{
|
{
|
||||||
return std::make_tuple(code, HttpErrorCode::ChunkReadError,
|
return HttpResponse(code, HttpErrorCode::ChunkReadError,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chunkSize == 0) break;
|
if (chunkSize == 0) break;
|
||||||
@ -319,9 +319,9 @@ namespace ix
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::string errorMsg("Cannot read http body");
|
std::string errorMsg("Cannot read http body");
|
||||||
return std::make_tuple(code, HttpErrorCode::CannotReadBody,
|
return HttpResponse(code, HttpErrorCode::CannotReadBody,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadSize = payload.size();
|
downloadSize = payload.size();
|
||||||
@ -333,16 +333,16 @@ namespace ix
|
|||||||
if (!gzipInflate(payload, decompressedPayload))
|
if (!gzipInflate(payload, decompressedPayload))
|
||||||
{
|
{
|
||||||
std::string errorMsg("Error decompressing payload");
|
std::string errorMsg("Error decompressing payload");
|
||||||
return std::make_tuple(code, HttpErrorCode::Gzip,
|
return HttpResponse(code, HttpErrorCode::Gzip,
|
||||||
headers, payload, errorMsg,
|
headers, payload, errorMsg,
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
payload = decompressedPayload;
|
payload = decompressedPayload;
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::make_tuple(code, HttpErrorCode::Ok,
|
return HttpResponse(code, HttpErrorCode::Ok,
|
||||||
headers, payload, std::string(),
|
headers, payload, std::string(),
|
||||||
uploadSize, downloadSize);
|
uploadSize, downloadSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpResponse HttpClient::get(const std::string& url,
|
HttpResponse HttpClient::get(const std::string& url,
|
||||||
|
@ -37,13 +37,34 @@ namespace ix
|
|||||||
CannotReadBody = 14
|
CannotReadBody = 14
|
||||||
};
|
};
|
||||||
|
|
||||||
using HttpResponse = std::tuple<int, // status
|
struct HttpResponse
|
||||||
HttpErrorCode, // error code
|
{
|
||||||
WebSocketHttpHeaders,
|
int statusCode;
|
||||||
std::string, // payload
|
HttpErrorCode errorCode;
|
||||||
std::string, // error msg
|
WebSocketHttpHeaders headers;
|
||||||
uint64_t, // upload size
|
std::string payload;
|
||||||
uint64_t>; // download size
|
std::string errorMsg;
|
||||||
|
uint64_t uploadSize;
|
||||||
|
uint64_t downloadSize;
|
||||||
|
|
||||||
|
HttpResponse(int s = 0,
|
||||||
|
const HttpErrorCode& c = HttpErrorCode::Ok,
|
||||||
|
const WebSocketHttpHeaders& h = WebSocketHttpHeaders(),
|
||||||
|
const std::string& p = std::string(),
|
||||||
|
const std::string& e = std::string(),
|
||||||
|
uint64_t u = 0,
|
||||||
|
uint64_t d = 0)
|
||||||
|
: statusCode(s)
|
||||||
|
, errorCode(c)
|
||||||
|
, headers(h)
|
||||||
|
, payload(p)
|
||||||
|
, errorMsg(e)
|
||||||
|
, uploadSize(u)
|
||||||
|
, downloadSize(d)
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
using HttpParameters = std::map<std::string, std::string>;
|
using HttpParameters = std::map<std::string, std::string>;
|
||||||
using Logger = std::function<void(const std::string&)>;
|
using Logger = std::function<void(const std::string&)>;
|
||||||
|
@ -55,13 +55,13 @@ namespace ix
|
|||||||
// FIXME: cert verification is disabled
|
// FIXME: cert verification is disabled
|
||||||
mbedtls_ssl_conf_authmode(&_conf, MBEDTLS_SSL_VERIFY_NONE);
|
mbedtls_ssl_conf_authmode(&_conf, MBEDTLS_SSL_VERIFY_NONE);
|
||||||
|
|
||||||
if (mbedtls_ssl_setup( &_ssl, &_conf ) != 0)
|
if (mbedtls_ssl_setup(&_ssl, &_conf) != 0)
|
||||||
{
|
{
|
||||||
errMsg = "SSL setup failed";
|
errMsg = "SSL setup failed";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mbedtls_ssl_set_hostname( &_ssl, host.c_str()) != 0)
|
if (mbedtls_ssl_set_hostname(&_ssl, host.c_str()) != 0)
|
||||||
{
|
{
|
||||||
errMsg = "SNI setup failed";
|
errMsg = "SNI setup failed";
|
||||||
return false;
|
return false;
|
||||||
|
2
makefile
2
makefile
@ -44,7 +44,7 @@ trail:
|
|||||||
sh third_party/remote_trailing_whitespaces.sh
|
sh third_party/remote_trailing_whitespaces.sh
|
||||||
|
|
||||||
format:
|
format:
|
||||||
sh third_party/indent.sh
|
find ixwebsocket ws -name '*.cpp' -o -name '*.h' -exec clang-format -i {} \;
|
||||||
|
|
||||||
# That target is used to start a node server, but isn't required as we have
|
# That target is used to start a node server, but isn't required as we have
|
||||||
# a builtin C++ server started in the unittest now
|
# a builtin C++ server started in the unittest now
|
||||||
|
@ -40,27 +40,18 @@ TEST_CASE("http client", "[http]")
|
|||||||
};
|
};
|
||||||
|
|
||||||
HttpClient httpClient;
|
HttpClient httpClient;
|
||||||
HttpResponse out;
|
HttpResponse response = httpClient.get(url, args);
|
||||||
out = httpClient.get(url, args);
|
|
||||||
|
|
||||||
auto statusCode = std::get<0>(out);
|
for (auto it : response.headers)
|
||||||
auto errorCode = std::get<1>(out);
|
|
||||||
auto responseHeaders = std::get<2>(out);
|
|
||||||
auto payload = std::get<3>(out);
|
|
||||||
auto errorMsg = std::get<4>(out);
|
|
||||||
auto uploadSize = std::get<5>(out);
|
|
||||||
auto downloadSize = std::get<6>(out);
|
|
||||||
|
|
||||||
for (auto it : responseHeaders)
|
|
||||||
{
|
{
|
||||||
std::cerr << it.first << ": " << it.second << std::endl;
|
std::cerr << it.first << ": " << it.second << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "Upload size: " << uploadSize << std::endl;
|
std::cerr << "Upload size: " << response.uploadSize << std::endl;
|
||||||
std::cerr << "Download size: " << downloadSize << std::endl;
|
std::cerr << "Download size: " << response.downloadSize << std::endl;
|
||||||
std::cerr << "Status: " << statusCode << std::endl;
|
std::cerr << "Status: " << response.statusCode << std::endl;
|
||||||
|
|
||||||
REQUIRE(errorCode == HttpErrorCode::Ok);
|
REQUIRE(response.errorCode == HttpErrorCode::Ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(IXWEBSOCKET_USE_TLS)
|
#if defined(IXWEBSOCKET_USE_TLS)
|
||||||
@ -91,27 +82,18 @@ TEST_CASE("http client", "[http]")
|
|||||||
};
|
};
|
||||||
|
|
||||||
HttpClient httpClient;
|
HttpClient httpClient;
|
||||||
HttpResponse out;
|
HttpResponse response = httpClient.get(url, args);
|
||||||
out = httpClient.get(url, args);
|
|
||||||
|
|
||||||
auto statusCode = std::get<0>(out);
|
for (auto it : response.headers)
|
||||||
auto errorCode = std::get<1>(out);
|
|
||||||
auto responseHeaders = std::get<2>(out);
|
|
||||||
auto payload = std::get<3>(out);
|
|
||||||
auto errorMsg = std::get<4>(out);
|
|
||||||
auto uploadSize = std::get<5>(out);
|
|
||||||
auto downloadSize = std::get<6>(out);
|
|
||||||
|
|
||||||
for (auto it : responseHeaders)
|
|
||||||
{
|
{
|
||||||
std::cerr << it.first << ": " << it.second << std::endl;
|
std::cerr << it.first << ": " << it.second << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "Upload size: " << uploadSize << std::endl;
|
std::cerr << "Upload size: " << response.uploadSize << std::endl;
|
||||||
std::cerr << "Download size: " << downloadSize << std::endl;
|
std::cerr << "Download size: " << response.downloadSize << std::endl;
|
||||||
std::cerr << "Status: " << statusCode << std::endl;
|
std::cerr << "Status: " << response.statusCode << std::endl;
|
||||||
|
|
||||||
REQUIRE(errorCode == HttpErrorCode::Ok);
|
REQUIRE(response.errorCode == HttpErrorCode::Ok);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -153,38 +153,30 @@ namespace ix
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::string body = computePayload(msg);
|
std::string body = computePayload(msg);
|
||||||
HttpResponse out = _httpClient.post(_url, body, args);
|
HttpResponse response = _httpClient.post(_url, body, args);
|
||||||
|
|
||||||
auto statusCode = std::get<0>(out);
|
|
||||||
auto errorCode = std::get<1>(out);
|
|
||||||
auto responseHeaders = std::get<2>(out);
|
|
||||||
auto payload = std::get<3>(out);
|
|
||||||
auto errorMsg = std::get<4>(out);
|
|
||||||
auto uploadSize = std::get<5>(out);
|
|
||||||
auto downloadSize = std::get<6>(out);
|
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
{
|
||||||
for (auto it : responseHeaders)
|
for (auto it : response.headers)
|
||||||
{
|
{
|
||||||
std::cerr << it.first << ": " << it.second << std::endl;
|
std::cerr << it.first << ": " << it.second << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "Upload size: " << uploadSize << std::endl;
|
std::cerr << "Upload size: " << response.uploadSize << std::endl;
|
||||||
std::cerr << "Download size: " << downloadSize << std::endl;
|
std::cerr << "Download size: " << response.downloadSize << std::endl;
|
||||||
|
|
||||||
std::cerr << "Status: " << statusCode << std::endl;
|
std::cerr << "Status: " << response.statusCode << std::endl;
|
||||||
if (errorCode != HttpErrorCode::Ok)
|
if (response.errorCode != HttpErrorCode::Ok)
|
||||||
{
|
{
|
||||||
std::cerr << "error message: " << errorMsg << std::endl;
|
std::cerr << "error message: " << response.errorMsg << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (responseHeaders["Content-Type"] != "application/octet-stream")
|
if (response.headers["Content-Type"] != "application/octet-stream")
|
||||||
{
|
{
|
||||||
std::cerr << "payload: " << payload << std::endl;
|
std::cerr << "payload: " << response.payload << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return statusCode == 200;
|
return response.statusCode == 200;
|
||||||
}
|
}
|
||||||
} // namespace ix
|
} // namespace ix
|
||||||
|
@ -117,45 +117,37 @@ namespace ix
|
|||||||
HttpParameters httpParameters = parsePostParameters(data);
|
HttpParameters httpParameters = parsePostParameters(data);
|
||||||
|
|
||||||
HttpClient httpClient;
|
HttpClient httpClient;
|
||||||
HttpResponse out;
|
HttpResponse response;
|
||||||
if (headersOnly)
|
if (headersOnly)
|
||||||
{
|
{
|
||||||
out = httpClient.head(url, args);
|
response = httpClient.head(url, args);
|
||||||
}
|
}
|
||||||
else if (data.empty())
|
else if (data.empty())
|
||||||
{
|
{
|
||||||
out = httpClient.get(url, args);
|
response = httpClient.get(url, args);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
out = httpClient.post(url, httpParameters, args);
|
response = httpClient.post(url, httpParameters, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
auto statusCode = std::get<0>(out);
|
for (auto it : response.headers)
|
||||||
auto errorCode = std::get<1>(out);
|
|
||||||
auto responseHeaders = std::get<2>(out);
|
|
||||||
auto payload = std::get<3>(out);
|
|
||||||
auto errorMsg = std::get<4>(out);
|
|
||||||
auto uploadSize = std::get<5>(out);
|
|
||||||
auto downloadSize = std::get<6>(out);
|
|
||||||
|
|
||||||
for (auto it : responseHeaders)
|
|
||||||
{
|
{
|
||||||
std::cerr << it.first << ": " << it.second << std::endl;
|
std::cerr << it.first << ": " << it.second << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "Upload size: " << uploadSize << std::endl;
|
std::cerr << "Upload size: " << response.uploadSize << std::endl;
|
||||||
std::cerr << "Download size: " << downloadSize << std::endl;
|
std::cerr << "Download size: " << response.downloadSize << std::endl;
|
||||||
|
|
||||||
std::cerr << "Status: " << statusCode << std::endl;
|
std::cerr << "Status: " << response.statusCode << std::endl;
|
||||||
if (errorCode != HttpErrorCode::Ok)
|
if (response.errorCode != HttpErrorCode::Ok)
|
||||||
{
|
{
|
||||||
std::cerr << "error message: " << errorMsg << std::endl;
|
std::cerr << "error message: " << response.errorMsg << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!headersOnly && errorCode == HttpErrorCode::Ok)
|
if (!headersOnly && response.errorCode == HttpErrorCode::Ok)
|
||||||
{
|
{
|
||||||
if (save || !output.empty())
|
if (save || !output.empty())
|
||||||
{
|
{
|
||||||
@ -168,14 +160,14 @@ namespace ix
|
|||||||
|
|
||||||
std::cout << "Writing to disk: " << filename << std::endl;
|
std::cout << "Writing to disk: " << filename << std::endl;
|
||||||
std::ofstream out(filename);
|
std::ofstream out(filename);
|
||||||
out.write((char*)&payload.front(), payload.size());
|
out.write((char*)&response.payload.front(), response.payload.size());
|
||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (responseHeaders["Content-Type"] != "application/octet-stream")
|
if (response.headers["Content-Type"] != "application/octet-stream")
|
||||||
{
|
{
|
||||||
std::cout << "payload: " << payload << std::endl;
|
std::cout << "payload: " << response.payload << std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user