【问题标题】:HTTParty with Proxy带代理的 HTTParty
【发布时间】:2012-09-26 20:10:29
【问题描述】:

我在 heroku 上尝试访问需要将我的应用程序 ip 列入白名单的 API。因此,我使用 heroku 附加组件 proximo 来获取 api 的白名单的主机/IP。

我设置的使用 HTTParty 测试连接性的快速测试失败了。

class FakeRequest
 include HTTParty
 http_proxy 'XX.XXX.XX.XX', 80, 'user', 'pass'


 def set_defaults
   {:api_key=>"BLARG_BLARG",
    :login_name=>"user",
    :method => "do_something",
    :response_format => "json", 
    :v => "1.0",
    :login_password=>"pass"}
end


 def make_post
  HTTParty.post "https://test.com", :query => set_defaults 
 end
end 

像这样: req = FakeRequest.new req.make_post

从 api 返回一条错误消息,抱怨源 IP 未列入白名单。我查看了源 IP,它没有使用代理。如何使用代理而不是我的 ISP 的 IP 进行 HTTParty 发布。

【问题讨论】:

    标签: ruby heroku proxy httparty


    【解决方案1】:

    这是我为此构建的模块:

    module ProximoParty
    
      PROXIMO = URI.parse(ENV['PROXIMO_URL'])
    
      def self.included(base)
        base.send(:include, HTTParty)
        base.http_proxy(PROXIMO.host, 80, PROXIMO.user, PROXIMO.password)
      end
    
    end
    

    这会使用 PROXIMO URL,因为它会在您安装插件时添加到您的 heroku 应用程序中。因此,您可以将此文件放入您的应用程序中,并将 include ProximoParty 放入您的 FakeRequest 类而不是 HTTParty 中,它应该“正常工作”。

    看起来我的代码正在做你的代码正在做的同样的事情,所以我猜你可能没有手动为 proximo 正确传递凭据。

    我遇到了一个类似的问题,它对我来说并不是很有效。我相信问题是我被绊倒了,在 proximo URL 中看起来有一个“代理:”协议,但这只是 URL 的用户名部分。

    无论如何,这可能有帮助,也可能没有,但如果有帮助,请告诉我!

    【讨论】:

    • 感谢 Jakeonrails!我切换到 rest-client 并在 HTTParty 下转到 Net::HTTP 无济于事。最后,几个小时后,我们决定在我们拥有的盒子上安装 squid,问题就解决了。
    • 如果有机会,我会试一试您的模块,但现在处于紧缩模式。
    • 这行不通。我实际上从来没有能够使 httparty 与代理一起工作。最终使用了 rest-client。
    【解决方案2】:

    我觉得你需要调用本地的httparty,像这样:

    def make_post
      self.post "https://test.com", :query => set_defaults 
    end
    

    【讨论】:

      【解决方案3】:

      当您将 HTTParty 配置为包含在您的模块中时,您必须通过您的类调用 HTTParty 方法,因此:

      def make_post
        self.class.post "https://test.com", :query => set_defaults
      end
      

      【讨论】:

        【解决方案4】:

        HTTParty 可以使用以下proxy options 的代理服务器地址。

        [:+http_proxyaddr+:] Address of proxy server to use
        [:+http_proxyport+:] Port of proxy server to use.
        [:+http_proxyuser+:] User for proxy server authentication
        [:+http_proxypass+:] Password for proxy server authentication.
        

        【讨论】:

          【解决方案5】:

          我提供了一个链接,因为它包含冗长的设置步骤。但是关于链接更改和页面变得无效的观点。我们在 EC2 AMI 上使用了 squid 代理服务器,并称之为一天。

          【讨论】:

            【解决方案6】:

            这让我大吃一惊,在这个问题上你能得到多少不起作用的答案。这是我的工作方式:

            HTTParty::Basement.http_proxy('localhost', 8000, nil, nil)
            

            把它作为一个全局覆盖放在你的 env.rb 文件中。而已。完成。

            【讨论】:

              【解决方案7】:

              使用最新版本的 HTTParty 就像使用 http_proxy method:

              class Foo
                include HTTParty
                http_proxy 'http://example.com', 80, 'user', 'pass'
              end
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-07-10
                • 2012-02-11
                • 2014-07-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多