我正在努力教自己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);
}
Run Code Online (Sandbox Code Playgroud)
这编译.但是,运行代码我通过套接字看到HTTP请求,但它只是在终端中挂起.此外,没有回应.在浏览器中测试此URL(http://www.telize.com/geoip)会返回JSON响应.如何使用Rust std库获得此响应(或任何响应)?谢谢!!
您的请求格式不正确,因为您尚未完成标题,因此它正在等待您这样做.要结束标题,您需要一个空行.也就是说,您必须在Host头之后写一个额外的CRLF.
(顺便说一句,我看不到port任何地方.)
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |