2012-10-05 30 views
6

Sono su heroku che prova ad accedere a un'API che richiede che le mie app ip siano autorizzate. Quindi, ho usato il componente aggiuntivo heroku per ottenere host/ip per la whitelist delle API.HTTParty con Proxy

Un test rapido che ho configurato per testare la connettività utilizzando HTTParty non funziona.

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 

Andando questo tipo: req = FakeRequest.new req.make_post

restituisce un messaggio di errore dal api lamentando che l'IP di origine non è nella lista bianca. Ho guardato l'IP sorgente e non sta usando il proxy. Come posso rendere HTTParty post usando il proxy e non l'IP del mio ISP.

risposta

3

Questo è il modulo che ho costruito per fare proprio questo:

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 

Questo utilizza l'URL PROXIMO come viene aggiunto al tuo Heroku applicazione quando si installa il componente aggiuntivo. Quindi puoi rilasciare questo file nella tua app e include ProximoParty nella tua classe FakeRequest invece di HTTParty e dovrebbe "funzionare".

Sembra che il mio codice stia facendo la stessa cosa che sta facendo il tuo codice, quindi quello che sto indovinando è che potresti non trasferire manualmente le credenziali correttamente per proximo.

Mi sono imbattuto in un problema simile in cui non funzionava abbastanza bene per me. Credo che il problema fosse che mi stavo facendo inciampare sul fatto che il protocollo Proximo sembrava essere un "proxy:" ma che era solo la parte username dell'URL.

In ogni caso, questo può o non può aiutare, ma per favore fatemi sapere se lo fa!

+0

Grazie Jakeonrails! Sono passato a rest-client e sono passato sotto HTTParty a Net :: HTTP senza alcun risultato. Alla fine, e un sacco di ore dopo, abbiamo deciso di installare il calamaro su una scatola che abbiamo e il problema è risolto. – RidingRails

+0

Se ne avrò la possibilità darò un colpo al tuo modulo, ma in modalità crunch in questo momento. – RidingRails

+1

questo non funziona. In realtà non sono mai stato in grado di far funzionare httparty con un proxy. Finito usando rest-client. –

0

Credo che hai bisogno di chiamare il httparty locali, in questo modo:

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

Come si configura HTTParty come inclusione nel modulo, è necessario chiamare HTTParty metodo attraverso il vostro codice categoria, in modo da:

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

HTTParty può utilizzare un indirizzo del server proxy utilizzando il seguente 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

ho incluso un link perché includono operazioni di messa in lunghi. Ma punto sul cambiamento del link e sulla pagina che diventa non valida. Abbiamo usato il server proxy Squid su un AMI EC2 e lo abbiamo chiamato un giorno.