你能从一个字符串构建一个 hyper::Request 吗?
Can you build a hyper::Request from a String?
我正在尝试编写拦截代理。我最初使用 hyper 作为服务器,因为它相对简单,但如果请求格式错误,hyper 会在我将请求传递到上游服务器之前返回响应。我想避免这种情况,所以我希望使用 tokio::net::TcpListener
从浏览器接收请求,然后使用 hyper 作为客户端将请求转发到远程服务器。
当我使用 TcpListener
和后续 TcpStream
时,请求以 u8
形式出现,然后我将其转换为 String
。有没有一种方法可以轻松地将其转换为 hyper::Request
,或者我是否需要自己编写代码来进行转换?
如果是后者,有没有人对允许我从字符串创建 HTTP 请求的替代库有任何建议?
更新
我发现您可以使用来自 seanmonstar(来自 Hyper 的同一作者)的这个板条箱从字节解析 HTTP 请求:
https://github.com/seanmonstar/httparse
也许使用您的 TCP 流并使用此 httparse 板条箱消耗传入字节就足够了。
原答案
如果我没记错的话,您正在尝试从字节流或从 TcpListener
获取的字节数组 (&[u8]
) 创建 hyper::Request
的实例.
要让 Hyper 服务器正确处理请求并使用您已经存在的 TCP 侦听器,您可以使用:https://docs.rs/hyper/0.14.11/hyper/server/struct.Server.html#method.from_tcp
然后您可以使用另一个 crate 将该请求流式传输到代理服务器:
https://github.com/tafia/hyper-proxy
我正在尝试编写拦截代理。我最初使用 hyper 作为服务器,因为它相对简单,但如果请求格式错误,hyper 会在我将请求传递到上游服务器之前返回响应。我想避免这种情况,所以我希望使用 tokio::net::TcpListener
从浏览器接收请求,然后使用 hyper 作为客户端将请求转发到远程服务器。
当我使用 TcpListener
和后续 TcpStream
时,请求以 u8
形式出现,然后我将其转换为 String
。有没有一种方法可以轻松地将其转换为 hyper::Request
,或者我是否需要自己编写代码来进行转换?
如果是后者,有没有人对允许我从字符串创建 HTTP 请求的替代库有任何建议?
更新
我发现您可以使用来自 seanmonstar(来自 Hyper 的同一作者)的这个板条箱从字节解析 HTTP 请求:
https://github.com/seanmonstar/httparse
也许使用您的 TCP 流并使用此 httparse 板条箱消耗传入字节就足够了。
原答案
如果我没记错的话,您正在尝试从字节流或从 TcpListener
获取的字节数组 (&[u8]
) 创建 hyper::Request
的实例.
要让 Hyper 服务器正确处理请求并使用您已经存在的 TCP 侦听器,您可以使用:https://docs.rs/hyper/0.14.11/hyper/server/struct.Server.html#method.from_tcp
然后您可以使用另一个 crate 将该请求流式传输到代理服务器: https://github.com/tafia/hyper-proxy