7

我在 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 发布。

4

7 回答 7

3

这是我为此构建的模块:

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 的用户名部分。

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

于 2012-10-05T22:28:04.203 回答
3

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

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

将此作为全局覆盖放在您的 env.rb 文件中。而已。完毕。

于 2018-08-16T00:41:12.670 回答
3

HTTParty 可以通过以下代理选项使用代理服务器地址。

[:+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.
于 2015-11-23T15:53:44.810 回答
2

使用最新版本的 HTTParty 就像使用以下 http_proxy方法一样简单:

class Foo
  include HTTParty
  http_proxy 'http://example.com', 80, 'user', 'pass'
end
于 2018-08-16T07:54:09.923 回答
1

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

def make_post
  self.class.post "https://test.com", :query => set_defaults
end
于 2014-05-23T14:06:40.610 回答
0

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

于 2016-03-05T01:12:45.553 回答
-1

我认为您需要调用本地 httparty,如下所示:

def make_post
  self.post "https://test.com", :query => set_defaults 
end
于 2013-11-29T20:44:31.177 回答