2012-10-05 18 views
6

Estoy en heroku tratando de acceder a una API que requiere que mi aplicación IP sea incluida en la lista blanca. Entonces, utilicé el complemento heroku proximo para obtener host/ip para la lista blanca de la API.HTTParty con Proxy

Una prueba rápida que configuré para probar la conectividad utilizando HTTParty está fallando.

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 

Yendo esto como: req = FakeRequest.new req.make_post

Devuelve un mensaje de error del API quejándose de que la IP de origen no está en la lista blanca. Miré la fuente IP y no está usando el proxy. ¿Cómo puedo hacer una publicación de HTTParty utilizando el proxy y no la IP de mi ISP?

Respuesta

3

Este es el módulo que construí para hacer precisamente esto:

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 

Este utiliza la URL PROXIMO ya que se agrega a su aplicación heroku al instalar el complemento. De modo que puede colocar este archivo en su aplicación y include ProximoParty en su clase FakeRequest en lugar de HTTParty y debería "funcionar".

Parece que mi código está haciendo lo mismo que está haciendo su código, así que supongo que es posible que no esté cargando las credenciales correctamente para proximo.

Me encontré con un problema similar en el que no me funcionaba bien desde el principio. Creo que el problema fue que me estaba tropezando porque parecía que había un protocolo "proxy:" en la URL proximo, pero esa era solo la parte de nombre de usuario de la URL.

De todos modos, esto puede o no puede ayudar, pero por favor, hágamelo saber si lo hace!

+0

Gracias Jakeonrails! Cambié a rest-client y pasé por HTTParty a Net :: HTTP inútilmente. Al final, y muchas horas después, decidimos instalar el calamar en una caja que tenemos y el problema está resuelto. – RidingRails

+0

Si tengo la oportunidad, le daré una oportunidad a su módulo, pero en el modo de crisis ahora mismo. – RidingRails

+1

esto simplemente no funciona. En realidad, nunca pude hacer que httparty funcione con un proxy. Terminó usando rest-client. –

0

creo que es necesario llamar a la httparty locales, así:

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

Como configurar HTTParty como una inclusión en el módulo, usted tiene que llamar HTTParty método a través de su clase, por lo que:

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

HTTParty puede usar una dirección de servidor proxy utilizando el siguiente 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. 
0

Incluí un enlace porque incluye largos pasos de configuración. Pero hay que tener en cuenta el cambio de enlace y la invalidación de la página. Usamos el servidor proxy squid en un EC2 AMI y lo llamamos un día.