【问题标题】:Ruby net/http can't connect to a TLS proxyRuby net/http 无法连接到 TLS 代理
【发布时间】:2022-01-25 05:36:18
【问题描述】:

Rubys net/http 允许您指定一个代理来路由所有请求,如下所示:

Net::HTTP.new("host", "443", "proxyHost", 8080, "proxyUsername", "password")

这在与 HTTP 代理一起使用时可以正常工作,但是当使用 TLS 代理而不是 HTTP 时会失败:

def tls_proxy(data)

  uri = URI("https://example.com/post")
  client = Net::HTTP.new("host", "443", "proxyHost", 8443, "proxyUsername", "password")

  client.ssl_version = :TLSv1_2
  client.use_ssl = true

  request = Net::HTTP::Post.new(uri.path)

  request['Content-type'] = 'application/json'
  request.body = data

  client.request(request)

end
Uncaught exception: end of file reached
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/protocol.rb:225:in `rbuf_fill'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/protocol.rb:191:in `readuntil'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/protocol.rb:201:in `readline'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/response.rb:40:in `read_status_line'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/response.rb:29:in `read_new'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http.rb:969:in `connect'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http.rb:930:in `do_start'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http.rb:919:in `start'
    /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http.rb:1470:in `request'
    /Users/laptop/Projects/tls-proxy-ruby/example-https.rb:47:in `tls_proxy'
    /Users/laptop/Projects/tls-proxy-ruby/example-https.rb:60:in `<top (required)>'

有没有办法让它与 TLS 代理一起工作,或者也许有一个支持 TLS 代理的库的替代方案?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    你可以试试httparty gem。

    require 'httparty'
    
    options = {
      http_proxyaddr: '127.0.0.1',
      http_proxyport: '8443',
      http_proxyuser: 'johndoe',
      http_proxypass: '123456'
    }
    
    response = HTTParty.get('https://example.com', options)
    

    【讨论】:

    • 它似乎也不支持 TLS 代理,如果我尝试使用HTTP 代理请求通过就好了,而 TLS 端口返回与“net/http”相同的错误将返回“未捕获的异常:到达文件结尾”。
    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2023-02-14
    • 2017-03-14
    • 2016-05-04
    相关资源
    最近更新 更多