10 个版本
0.5.3 | 2023年6月23日 |
---|---|
0.5.2 | 2022年4月3日 |
0.5.1 | 2020年11月30日 |
0.4.1 | 2020年5月31日 |
0.1.0 | 2020年3月22日 |
#1855 in 网络编程
40 个月下载量
18KB
303 代码行
fastforward
Fastforward 是用于在 Rust 中编写反向代理的库。
用法 - simple_proxy
要实现仅接收在 listen_addr
上的流量并将其转发到 proxy_addr
的代理,请使用 simple_proxy
函数。
extern crate fastforward;
extern crate http;
use std::net::SocketAddr;
use proxy::simple_proxy;
fn main() {
let listen_addr: SocketAddr = "127.0.0.1:8080".parse().unwrap();
let proxy_addr: SocketAddr = "127.0.0.1:4000".parse().unwrap();
println!("running on port :8080");
simple_proxy(listen_addr, proxy_addr);
}
用法 - generic_proxy
要实现代理的任意逻辑,请编写一个请求导演函数。请求在传递给导演后,将根据请求中的 "Host" 头部指定的地址进行代理。
extern crate fastforward;
extern crate http;
use http::{
header::HeaderValue,
Response
};
use std::io;
use std::net::SocketAddr;
use fastforward::generic_proxy;
// The director function mutates the incoming request before proxying it.
// In this example, the request URI is changed to the proxy URI.
// This examle mimics the functionality of the `simple_proxy` function.
fn req_transform(req: &mut http::Request<Vec<u8>>) -> Option<Response<Vec<u8>>> {
// set the variables
let proxy_addr = HeaderValue::from_str("127.0.0.1:4000").unwrap();
let req_headers = req.headers_mut();
req_headers.remove(http::header::HOST);
req_headers.insert(http::header::HOST, proxy_addr);
None // ignore the return type for this example
}
fn resp_transform(resp: &mut http::Response<Vec<u8>>) {
let x_header_val = HeaderValue::from_str("Foo Bar").unwrap();
let resp_headers = resp.headers_mut();
resp_headers.insert("X-HEADER-VAL", x_header_val);
}
fn main() {
let listen_addr: SocketAddr = "127.0.0.1:8080".parse().unwrap();
generic_proxy(listen_addr, req_transform, resp_transform);
}
依赖项
~3MB
~57K SLoC