2012-10-05 28 views
6

Jestem na Heroku, próbując uzyskać dostęp do interfejsu API, który wymaga umieszczenia mojego IP aplikacji na białej liście. Więc użyłem dodatku proximo heroku, aby uzyskać host/ip dla białej listy APi.HTTParty z Proxy

Szybki test, który skonfigurowałem do testowania łączności za pomocą HTTParty, zawodzi.

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 

Będzie to tak: req = FakeRequest.new req.make_post

zwraca komunikat błędu z API twierdząc, że źródłem IP nie jest na białej liście. Spojrzałem na źródłowy adres IP i nie korzystałem z proxy. Jak mogę uczynić HTTParty po użyciu serwera proxy, a nie adresu IP mojego ISP?

Odpowiedz

3

Jest to moduł I zbudował właśnie do tego:

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 

używa Następny URL, ponieważ dodaje do swojej aplikacji Heroku po zainstalowaniu dodatku. Możesz więc upuścić ten plik do swojej aplikacji i include ProximoParty do swojej klasy FakeRequest zamiast do HTTParty i powinien "po prostu zadziałać".

Wygląda na to, że mój kod robi to samo, co twój kod, chociaż domyślam się, że nie możesz ręcznie przenieść referencji poprawnie dla proximo.

Wpadłem na podobny problem, który nie działał dla mnie od razu. Sądzę, że problem polegał na tym, że potknąłem się o to, że w adresie URL proximo wyglądał protokół "proxy:", ale była to tylko nazwa użytkownika w adresie URL.

W każdym razie może, ale nie musi, ale proszę, daj mi znać, jeśli tak się stanie!

+0

Dzięki Jakeonrails! Przełączyłem się na klienta odpoczynku i przeszedłem pod HTTParty do Net :: HTTP bez rezultatu. W końcu, i wiele godzin później, zdecydowaliśmy się zainstalować squid na pudełku, który mamy i problem został rozwiązany. – RidingRails

+0

Jeśli dostanę szansę, oddam ci twój moduł, ale w trybie kryzysu teraz. – RidingRails

+1

to po prostu nie działa. Naprawdę nigdy nie byłem w stanie sprawić, by httparty działały z proxy. Skończyło się na używaniu reszty-klienta. –

0

myślę, że trzeba zadzwonić do lokalnego httparty, tak:

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

Jak skonfigurować HTTParty jako włączenie modułu, trzeba zadzwonić HTTParty metoda dzięki swojej klasie, więc:

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

HTTParty może używać adresu serwera proxy przy użyciu następującego 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

Dołączyłem link, ponieważ zawiera on długie kroki konfiguracji. Ale chodziło o zmianę linku i unieważnienie strony. Użyliśmy squid serwera proxy na ECI AMI i nazwał to dzień.