HTTPクライアントの作成(TCPクライアントサンプル) を参考にZigでインチキHTTPクライアントを作成してみた。 Zig初心者なので添削して欲しい。
zig version 0.10.0-dev.3361+c650ccfca
const std = @import("std");
const print = std.debug.print;
const net = std.net;
pub fn main() !void {
var buffer: [1024]u8 = undefined;
const allocator = std.heap.FixedBufferAllocator.init(&buffer).allocator();
const socket = try net.tcpConnectToHost(allocator, "www.google.com", 80);
defer socket.close();
var response_buffer: [1024]u8 = undefined;
_ = try socket.write("GET / HTTP/1.1\r\n");
_ = try socket.write("\r\n");
const len = try socket.read(&response_buffer);
const response = response_buffer[0..len];
print("{s}\n", .{response});
}
ありがたいことに、mattnさんに添削していただいたので参考にして修正してみました。
const std = @import("std");
const net = std.net;
const mem = std.mem;
pub fn main() !void {
var buffer: [1024]u8 = undefined;
const allocator = std.heap.FixedBufferAllocator.init(&buffer).allocator();
const socket = try net.tcpConnectToHost(allocator, "www.google.com", 80);
defer socket.close();
var response_buffer: [1024]u8 = undefined;
var writer = std.io.getStdOut().writer();
_ = try socket.write("GET / HTTP/1.1\r\n");
_ = try socket.write("HOST: www.google.com\r\n");
_ = try socket.write("\r\n");
while(true) {
const len = try socket.read(&response_buffer);
const response = response_buffer[0..len];
try writer.writeAll(response);
if (mem.endsWith(u8, response_buffer[0..len], "0\r\n\r\n")) {
break;
}
}
}