gpt4 book ai didi

ruby-on-rails - 通过 PROXY、ruby 的 HTTP2 请求

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:02 25 4
gpt4 key购买 nike

我有一些通过 HTTP2 运行的远程 REST API。它使用证书通过 SSL 运行。目标是通过代理使用 SSL 证书通过 HTTP2 发送和接收数据。

http-2 & net-http2 gem,允许使用 HTTP2 发送请求。但是代理呢?在标准的 Net::HTTP 库中,有一个子类 Net::HTTP::Proxy 复制父类 Net::HTTP 类的行为,除了它通过代理服务器发送请求。但是 HTTP2 gems 不支持它。

我提出的关闭想法是制作类似于 http1.1 的代理实现的东西- 将“Host:”和“Proxy-Authorization:”字段写入 Net-Http2 gem 使用的套接字:

  @socket.writeline sprintf('CONNECT %s:%s HTTP/%s',
@address, @port, HTTPVersion)
@socket.writeline "Host: #{@address}:#{@port}"
if proxy_user
credential = ["#{proxy_user}:#{proxy_pass}"].pack('m')
credential.delete!("\r\n")
@socket.writeline "Proxy-Authorization: Basic #{credential}"
end
@socket.writeline ''

但最终结果是:

SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A

我可能会遗漏一些技术知识来实现​​这一点,因此非常感谢与研究方向相关的任何帮助。

最佳答案

毕竟,我用 net/http 标准库中的一个示例完成了我的想法,并为 Net-http2 gem 创建了一个拉取请求:https://github.com/ostinelli/net-http2/pull/11

这个想法是正确的,我们所要做的就是使用任何 tcp 套接字发送代理“CONNECT”消息,其中包含我们要连接的地址,因此它会创建一个绕过所有进出数据的 TCP 隧道,无论是 HTTP1.1 还是 HTTP2,还是其他任何东西都没有关系。

部分代码如下:

def self.proxy_tcp_socket(uri, options)
proxy_addr = options[:proxy_addr]
proxy_port = options[:proxy_port]
proxy_user = options[:proxy_user]
proxy_pass = options[:proxy_pass]

proxy_uri = URI.parse("#{proxy_addr}:#{proxy_port}")
# create a regular TCP socket (with or w/o SSL, if needed)
proxy_socket = tcp_socket(proxy_uri, options)

# The majority of proxies do not explicitly support HTTP/2 protocol,
# while they successfully create a TCP tunnel
# which can pass through binary data of HTTP/2 connection.
# So we’ll keep HTTP/1.1
http_version = '1.1'

buf = "CONNECT #{uri.host}:#{uri.port} HTTP/#{http_version}\r\n"
buf << "Host: #{uri.host}:#{uri.port}\r\n"
if proxy_user
credential = ["#{proxy_user}:#{proxy_pass}"].pack('m')
credential.delete!("\r\n")
buf << "Proxy-Authorization: Basic #{credential}\r\n"
end
buf << "\r\n"
proxy_socket.write(buf)
validate_proxy_response!(proxy_socket)

proxy_socket
end

关于ruby-on-rails - 通过 PROXY、ruby 的 HTTP2 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40675517/

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