【问题标题】:Unable to use proxies with twitter api无法通过 twitter api 使用代理
【发布时间】:2016-02-26 16:06:15
【问题描述】:

我正在使用 sferik 的 gem,效果很好,除非我尝试使用代理。 (https://github.com/sferik/twitter/blob/master/examples/Configuration.md#using-a-proxy)

这是我的代码:

proxy = nil
if account.proxy_ip.present?
  proxy = {
      host: account.proxy_ip,
      port: account.proxy_port
  }
  proxy[:username] = account.proxy_user
  proxy[:password] = account.proxy_password
end
client = Twitter::REST::Client.new do |config|
  config.consumer_key        = account.consumer_key
  config.consumer_secret     = account.consumer_secret
  config.access_token        = account.access_token_key
  config.access_token_secret = account.access_token_secret
  config.proxy               = proxy if proxy.present?
end
client.update('hello world')

这就是我得到的错误:

undefined method `host=' for nil:NilClass (NoMethodError)
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday/options.rb:31:in `block in update'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday/options.rb:20:in `each'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday/options.rb:20:in `update'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday/options.rb:7:in `from'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday/options.rb:231:in `from'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday/connection.rb:286:in `proxy'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday/connection.rb:83:in `initialize'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday.rb:70:in `new'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/faraday-0.9.2/lib/faraday.rb:70:in `new'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/client.rb:97:in `connection'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/request.rb:25:in `initialize'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/utils.rb:50:in `new'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/utils.rb:50:in `perform_request'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/utils.rb:95:in `perform_request_with_objects'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/utils.rb:87:in `perform_post_with_objects'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/users.rb:232:in `block in users'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/utils.rb:37:in `block in pmap'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/utils.rb:37:in `each_slice'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/utils.rb:37:in `each'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/utils.rb:37:in `collect'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/utils.rb:37:in `pmap'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/utils.rb:25:in `flat_pmap'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/users.rb:231:in `users'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/twitter-5.15.0/lib/twitter/rest/friends_and_followers.rb:112:in `block in follow'

代理ip和端口设置正确。我无法弄清楚是什么问题。任何线索如何克服这个问题?

谢谢

【问题讨论】:

    标签: ruby-on-rails api twitter proxy


    【解决方案1】:

    所以我深入研究了faraday 的连接库,twitter gem 使用它来建立与 API 的连接。事实证明,代理哈希既不期望 host 也不期望 port 属性。相反,它需要一个uri 属性,该属性必须是Addressable::URI (Check out the code here) 的实例

    所以,如果你在代理后面使用Twitter::REST::Client,你必须这样声明它:

    client = Twitter::REST::Client.new({
      consumer_key: "consumer_key",
      consumer_secret: "consumer_secret",
      access_token: "access_token_key",
      access_token_secret: "access_token_secret",
      proxy: {
        uri: Addressable::URI.parse("http://proxy_host:proxy_port"),
        username: "proxy_username",
        password: "proxy_password"
      }
    })
    

    希望这会有所帮助。干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-29
      • 2013-01-05
      • 2021-09-03
      • 2013-07-10
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多