gpt4 book ai didi

http - 使用 std 在 Rust 中发出 HTTP 请求

转载 作者:可可西里 更新时间:2023-11-01 02:33:24 28 4
gpt4 key购买 nike

我正在尝试自学 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com