Networking and HTTP
34.1 HTTP Client
import net.http
import json
fn main() {
resp := http.get('https://api.github.com/repos/vlang/v') or { panic(err) }
println(resp.status_code)
println(resp.body.len)
data := http.post_json('https://httpbin.org/post', json.encode({'a': 1})) or { panic(err) }
println(data.body)
mut req := http.new_request(.get, 'https://example.com', '')
req.add_header(.user_agent, 'v-client')
req.add_custom_header('X-Token', 'abc') or {}
r := req.do() or { panic(err) }
println(r.header.get(.content_type) or { '' })
http.download_file('https://example.com/file.zip', 'file.zip') or {}
text := http.fetch(url: 'https://example.com', method: .get) or { panic(err) }
_ = text
}34.2 Simple HTTP Server
import net.http
struct Handler {}
fn (h Handler) handle(req http.Request) http.Response {
mut res := http.Response{
body: 'Hello from ${req.url}'
}
res.set_status(.ok)
return res
}
fn main() {
mut server := http.Server{
addr: ':8080'
handler: Handler{}
}
server.listen_and_serve()
}34.3 TCP, UDP, WebSockets
Also: net.smtp (send email), net.urllib (URL parsing), net.html (HTML parsing), net.ftp, TLS via net.mbedtls (bundled) or net.openssl.
import net
// TCP server
mut l := net.listen_tcp(.ip, ':9000') or { panic(err) }
for {
mut conn := l.accept() or { continue }
spawn fn (mut c net.TcpConn) {
defer { c.close() or {} }
mut buf := []u8{len: 1024}
n := c.read(mut buf) or { return }
c.write(buf[..n]) or {}
}(mut conn)
}
// TCP client: net.dial_tcp('localhost:9000')!
// UDP: net.listen_udp(':9001'), net.dial_udp('host:port')
// WebSocket: import net.websocket; websocket.new_client('wss://...')