From f640448109ca233d215ec1c07b795bd4313f428d Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Mon, 13 Apr 2026 02:11:27 +0800 Subject: feat: add binary file download support by parsing Content-Type headers --- src/net/http_client.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/net') 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 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 ) ); -- cgit v1.2.3