2015-05-13 18 views
11

Chcę spojrzeć na pełny adres URL, który klejnot HTTParty skonstruował na podstawie moich parametrów, przed lub po jego przesłaniu, nie ma znaczenia.Jak mogę sprawdzić pełny adres URL wygenerowany przez HTTParty?

Byłbym również szczęśliwy, chwytając to z obiektu odpowiedzi, ale nie widzę sposobu, aby to zrobić.

(Bit tle)

buduję otoki dla API używając gem HTTParty. Działa bardzo dobrze, ale od czasu do czasu otrzymuję niespodziewaną odpowiedź ze strony zdalnej i chcę się dowiedzieć, dlaczego - czy jest to coś, co wysłałem nieprawidłowo? Jeśli tak to co? Czy w jakiś sposób zniekształciłem żądanie? Patrząc na nieprzetworzony adres URL będzie przydatny do rozwiązywania problemów, ale nie rozumiem, jak to zrobić.

Na przykład:

HTTParty.get('http://example.com/resource', query: { foo: 'bar' }) 

Przypuszczalnie generuje:

http://example.com/resource?foo=bar 

Ale jak mogę to sprawdzić?

W jednym przypadku zrobiłem to:

HTTParty.get('http://example.com/resource', query: { id_numbers: [1, 2, 3] } 

Ale to nie działa. Poprzez eksperymentowanie byłem w stanie produkować ten, który pracował:

HTTParty.get('http://example.com/resource', query: { id_numbers: [1, 2, 3].join(',') } 

Tak wyraźnie HTTParty domyślnego podejścia do kształtowania ciąg kwerendy nie wyrównać z preferowanego formatu projektantów API. W porządku, ale niezręcznie było ustalić dokładnie, co jest potrzebne.

Odpowiedz

18

Nie przekazałeś podstawowego identyfikatora URI w swoim przykładzie, więc nie zadziałałoby.

Poprawianie że można dostać cały adres URL tak:

res = HTTParty.get('http://example.com/resource', query: { foo: 'bar' }) 
res.request.last_uri.to_s 
# => "http://example.com/resource?foo=bar" 

Korzystanie klasę:

class Example 
    include HTTParty 
    base_uri 'example.com' 

    def resource 
    self.class.get("/resource", query: { foo: 'bar' }) 
    end 
end 

example = Example.new 
res = example.resource 
res.request.last_uri.to_s 
# => "http://example.com/resource?foo=bar" 
+0

Tak, to jest faktycznie skopiowane z podklasy, więc ustawione jest 'base_uri'. Poprawię to. Dzięki! – Leo

+0

Ah, rozumiem! Próbowałem 'res.last_uri', ale dostałem błąd. Widzę teraz, że włączenie '.response' trafia do właściwego obiektu. – Leo

+1

Działa, ale nie wyświetla parametrów przekazanych do adresu URL. – djangofan

7

można zobaczyć wszystkie informacje wniosków HTTParty wysyła najpierw przez ustawienie:

class Example 
    include HTTParty 
    debug_output STDOUT 
end 

Następnie wydrukuje informacje o żądaniu, w tym adres URL, do konsoli.

+0

To jest naprawdę przydatne. Przyjmuję odpowiedź @victorkohl, ponieważ jest bardziej bezpośrednio stosowana, ale jako ogólne podejście do debugowania jest to wspaniałe. – Leo

+0

Otrzymuję 'NoMethodError: undefined method 'debug_output' dla błędu HTTParty: Module'. – infused

+0

@infused przepraszam za to, zaktualizowałem odpowiedź – DiegoSalazar

Powiązane problemy