我正在尝试自学 Rust。我知道 rust-http ,但我想构建自己的 http 客户端。我正在使用 GNU Linux 64 位的当前夜间构建。
这是我当前的代码:
use std::io::net::ip::SocketAddr;
use std::io::net::tcp::TcpStream;
use std::io::net::addrinfo::get_host_addresses;
use std::io::net::ip::IpAddr;
use std::io::stdio::println;
fn main() {
// HTTP endpoint
let host = ~"www.telize.com";
let path = ~"/geoip";
// Attempt to convert host to IP address
let ip_lookup = get_host_addresses(host).unwrap();
// Open socket connection
let addr = SocketAddr { ip: ip_lookup[0].clone(), port: port.clone() };
let mut socket = TcpStream::connect_timeout(addr, 200u64).unwrap();
// Format HTTP request
let mut header = format!("GET {} HTTP/1.0\r\nHost: {}\r\n", path.clone(), host.clone());
println(header);
socket.write_str(header);
// Make request and return response as string
let resp = socket.read_to_str().unwrap();
println(resp);
}
这编译。但是,运行代码时我看到套接字上的 HTTP 请求,但它只是卡在终端中。此外,没有回应。在浏览器中测试此 url ( http://www.telize.com/geoip) 会返回一个 JSON 响应。我如何使用 Rust std 库获得此响应(或任何响应)?谢谢!!
最佳答案
您的请求格式不正确,因为您尚未结束标题,因此它正在等待您完成。要结束标题,您需要一个空行。也就是说,您必须在 Host header 之后多写一个 CRLF。
(顺便说一句,我在任何地方都没有看到 port
定义。)
关于http - 使用 std 在 Rust 中发出 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23346757/