【问题标题】:EventMachine HTTP Request can't connect behind proxy via HTTPSEventMachine HTTP 请求无法通过 HTTPS 在代理后面连接
【发布时间】:2012-02-23 07:33:46
【问题描述】:

我正在使用 em-http,但我无法在代理后面获得 HTTPS(SSL) 连接。这是我的代码。

require 'eventmachine'
require 'em-http'

url = "https://twitter.com/"
opts = {
  :proxy => { :host => 'my.proxy', :port => 8080 }
}

EventMachine.run do
  http = EventMachine::HttpRequest.new(url, opts).get
  http.callback {
    puts http.response
    EventMachine.stop
  }
end

这段代码可以正常工作,但它什么也不做,也不会退出 eventmachine 主循环。

当我在以下条件下尝试时,我的应用可以连接到目标。

  • 外部代理/通过 HTTPS
  • 在代理后面/通过 HTTP

我也可以在代理后面使用 curl 获得响应。

curl "https://twitter.com/"

我的代码有什么问题?

【问题讨论】:

  • 您可以考虑为 get 请求添加超时,这样至少应用程序不会永远挂起。将您的行更改为 http = EventMachine::HttpRequest.new(url, opts).get, :timeout => 15

标签: ruby eventmachine


【解决方案1】:

我今天遇到了同样的问题,我无法让代理的 ssl 请求与我的 http 代理一起使用,但我能够让它与 socks5 代理一起使用:

:proxy => { :host => 'my.proxy', :port => 8080, :type => :socks5 }

【讨论】:

    【解决方案2】:

    换个电话:

    http = EventMachine::HttpRequest.new(url).get opts
    

    【讨论】:

    • 如果你能解释一下为什么会这样会很有帮助。
    【解决方案3】:

    指定errback。然后,您的代码将退出事件循环并打印代理请求可能遇到的任何问题:

    http.errback {
      p http.response_header.status
      p http.response_header
      p http.response
    
      EventMachine.stop
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多