2019-08-21 19:04:06 +02:00
|
|
|
module http
|
|
|
|
|
|
|
|
import net
|
|
|
|
import strings
|
|
|
|
|
2019-08-25 00:48:06 +02:00
|
|
|
fn (req &Request) http_do(port int, method, host_name, path string) ?Response {
|
2019-08-21 19:04:06 +02:00
|
|
|
bufsize := 512
|
|
|
|
rbuffer := [512]byte
|
|
|
|
mut sb := strings.new_builder(100)
|
2019-08-25 00:48:06 +02:00
|
|
|
s := req.build_request_headers(method, host_name, path)
|
2019-08-21 19:04:06 +02:00
|
|
|
|
|
|
|
client := net.dial( host_name, port) or { return error(err) }
|
|
|
|
client.send( s.str, s.len )
|
|
|
|
for {
|
|
|
|
readbytes := client.crecv( rbuffer, bufsize )
|
|
|
|
if readbytes < 0 { return error('http_do error reading response. readbytes: $readbytes') }
|
|
|
|
if readbytes == 0 { break }
|
|
|
|
sb.write( tos(rbuffer, readbytes) )
|
|
|
|
}
|
|
|
|
client.close()
|
|
|
|
return parse_response(sb.str())
|
|
|
|
}
|