14个版本
新 0.2.1 | 2024年8月20日 |
---|---|
0.2.0 | 2024年3月23日 |
0.2.0-alpha.3 | 2023年12月7日 |
0.2.0-alpha.2 | 2023年11月18日 |
0.1.2 | 2021年11月3日 |
#41 in HTTP客户端
1,061 每月下载量
用于 5 crates
135KB
3K SLoC
OxHTTP
OxHTTP是Rust中HTTP 1.1的简单直接同步实现。它提供客户端和服务器。它不旨在成为所有情况下都能正常工作的HTTP实现,而是一个简单实现,用于简单场景。
客户端
OxHTTP提供了一个客户端。它的目标是遵循Web Fetch标准的基本概念,而不涉及特定于网络浏览器的部分(上下文、CORS...)。
HTTPS默认禁用,可通过以下功能启用:
native-tls
使用当前系统原生实现。rustls-ring-platform-verifier
使用Rustls和Ring加密库以及主机验证器或平台证书。rustls-ring-webpki
使用Rustls和Ring加密库以及通用CA数据库。rustls-ring-native
使用Rustls和Ring加密库以及主机证书。rustls-aws-lc-platform-verifier
使用Rustls和AWS Libcrypto for Rust以及主机验证器或平台证书。rustls-aws-lc-webpki
使用Rustls和AWS Libcrypto for Rust以及通用CA数据库。rustls-aws-lc-native
使用 Rustls 和 AWS Libcrypto for Rust 以及主机证书。
示例
use oxhttp::Client;
use oxhttp::model::{Request, Method, Status, HeaderName};
use std::io::Read;
let client = Client::new();
let response = client.request(Request::builder(Method::GET, "http://example.com".parse().unwrap()).build()).unwrap();
assert_eq!(response.status(), Status::OK);
assert_eq!(response.header(&HeaderName::CONTENT_TYPE).unwrap().as_ref(), b"text/html; charset=UTF-8");
let body = response.into_body().to_string().unwrap();
服务器
OxHTTP提供了一个线程化的HTTP服务器。它仍在开发中。请在反向代理后面使用,自行承担风险!
示例
use std::net::{Ipv4Addr, Ipv6Addr};
use oxhttp::Server;
use oxhttp::model::{Response, Status};
use std::time::Duration;
// Builds a new server that returns a 404 everywhere except for "/" where it returns the body 'home'
let mut server = Server::new( | request| {
if request.url().path() == "/" {
Response::builder(Status::OK).with_body("home")
} else {
Response::builder(Status::NOT_FOUND).build()
}
});
// We bind the server to localhost on both IPv4 and v6
server = server.bind((Ipv4Addr::LOCALHOST, 8080)).bind((Ipv6Addr::LOCALHOST, 8080));
// Raise a timeout error if the client does not respond after 10s.
server = server.with_global_timeout(Duration::from_secs(10));
// Limits the max number of concurrent connections to 128.
server = server.with_max_concurrent_connections(128);
// We spawn the server and block on it
server.spawn().unwrap().join().unwrap();
许可证
本项目采用以下任一许可证:
- Apache License, Version 2.0, (LICENSE-APACHE 或
<http://www.apache.org/licenses/LICENSE-2.0>
) - MIT许可证 (LICENSE-MIT 或
<http://opensource.org/licenses/MIT>
)
任选其一。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义的,您提交给OxHTTP的任何有意包含的贡献,应如上所述双重许可,不附加任何额外条款或条件。
依赖项
~1–19MB
~396K SLoC