Skip to content

Commit 11ec511

Browse files
committed
fix http client impl
1 parent 35de3a2 commit 11ec511

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/httpfile/http_client.zig

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,8 @@ pub const HttpClient = struct {
5757
}
5858

5959
const uri = try Uri.parse(request.url);
60-
// var server_header_buf: [4096]u8 = undefined;
6160

6261
var req = try self.client.request(request.method.?, uri, .{
63-
// .server_header_buffer = &server_header_buf,
6462
.extra_headers = request.headers.items,
6563
});
6664

@@ -71,7 +69,10 @@ pub const HttpClient = struct {
7169
}
7270

7371
if (request.body) |body| {
74-
try req.sendBodyComplete(body);
72+
var b = try req.sendBodyUnflushed(&.{});
73+
try b.writer.writeAll(body);
74+
try b.end();
75+
try req.connection.?.flush();
7576
} else {
7677
try req.sendBodiless();
7778
}
@@ -83,16 +84,25 @@ pub const HttpClient = struct {
8384

8485
var header_iterator = raw_response.head.iterateHeaders();
8586
while (header_iterator.next()) |header| {
87+
std.debug.print("{s}, {s}\n", .{ header.name, header.value });
8688
const name = try self.allocator.dupe(u8, header.name);
8789
const value = try self.allocator.dupe(u8, header.value);
8890
try response.headers.put(name, value);
8991
}
9092

91-
// Optimal size depends on how you will use the reader.
92-
var reader_buffer: [100]u8 = undefined;
93-
const body_reader = raw_response.reader(&reader_buffer);
94-
response.body = try body_reader.allocRemaining(self.allocator, .limited(std.math.maxInt(usize)));
93+
const decompress_buffer: []u8 = switch (raw_response.head.content_encoding) {
94+
.identity => &.{},
95+
.zstd => try self.allocator.alloc(u8, std.compress.zstd.default_window_len),
96+
.deflate, .gzip => try self.allocator.alloc(u8, std.compress.flate.max_window_len),
97+
.compress => return error.UnsupportedCompressionMethod,
98+
};
99+
defer self.allocator.free(decompress_buffer);
100+
var transfer_buffer: [64]u8 = undefined;
101+
var decompress: http.Decompress = undefined;
102+
const reader = raw_response.readerDecompressing(&transfer_buffer, &decompress, decompress_buffer);
95103

104+
// Optimal size depends on how you will use the reader.
105+
response.body = try reader.allocRemaining(self.allocator, .unlimited);
96106
return response;
97107
}
98108

0 commit comments

Comments
 (0)