diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-04-13 02:11:27 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-04-13 02:11:27 +0800 |
| commit | f640448109ca233d215ec1c07b795bd4313f428d (patch) | |
| tree | a45aa53cee1823a35a5bfa64e57bf86d58c10318 /src/net | |
| parent | 0c214c3b0a94b1286ef252d6e57c153dd82f134f (diff) | |
| download | rwebbrowser-f640448109ca233d215ec1c07b795bd4313f428d.tar.gz rwebbrowser-f640448109ca233d215ec1c07b795bd4313f428d.tar.xz | |
feat: add binary file download support by parsing Content-Type headers
Diffstat (limited to 'src/net')
| -rw-r--r-- | src/net/http_client.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/net/http_client.cc b/src/net/http_client.cc index 240b234..7372247 100644 --- a/src/net/http_client.cc +++ b/src/net/http_client.cc @@ -314,6 +314,18 @@ std::expected<HttpResponse, std::string> HttpClient::fetch( std::string_view url const auto header_end = raw_response.find( "\r\n\r\n" ); if ( header_end != std::string::npos ) { response.body = raw_response.substr( header_end + 4 ); + const std::string headers = raw_response.substr( 0, header_end ); + std::size_t ct_pos = headers.find( "Content-Type: " ); + if ( ct_pos == std::string::npos ) { + ct_pos = headers.find( "content-type: " ); + } + if ( ct_pos != std::string::npos ) { + ct_pos += 14; + const std::size_t end_pos = headers.find( '\r', ct_pos ); + if ( end_pos != std::string::npos ) { + response.content_type = headers.substr( ct_pos, end_pos - ct_pos ); + } + } if ( raw_response.size() >= 12 ) { try { response.status_code = std::stoi( raw_response.substr( 9, 3 ) ); |
