2015-05-13 14 views
11

Voglio esaminare l'URL completo che la gemma HTTParty ha creato dai miei parametri, prima o dopo la sua presentazione, non ha importanza.Come si controlla l'URL completo generato da HTTParty?

Sarei anche felice di prenderlo dall'oggetto risposta, ma non riesco a vedere un modo per farlo.

(un po 'di background)

Sto costruendo un wrapper per un'API utilizzando la gemma HTTParty. Funziona in generale, ma a volte ricevo una risposta inaspettata dal sito remoto e voglio approfondire il motivo: è qualcosa che ho inviato in modo errato? E allora? Ho in qualche modo deformato la richiesta? Guardare l'URL grezzo sarebbe utile per la risoluzione dei problemi, ma non riesco a vedere come.

Ad esempio:

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

genera Presumibilmente:

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

Ma come posso controllare questo?

In un caso ho fatto questo:

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

Ma non ha funzionato. Attraverso la sperimentazione sono stato in grado di produrre questo che ha funzionato:

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

Così chiaramente di HTTParty approccio predefinita a formare la stringa di query non allinearsi con formato preferito le API progettisti. Va bene, ma è stato difficile trovare esattamente ciò che era necessario.

risposta

18

Non hai passato l'URI di base nell'esempio, quindi non avrebbe funzionato.

Correzione che, è possibile ottenere l'intero URL come questo:

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

Utilizzo di una classe:

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

Sì, questo viene effettivamente copiato da una sottoclasse, quindi "base_uri' è impostato. Lo correggerò. Grazie! – Leo

+0

Ah, ho capito! Ho provato 'res.last_uri' ma ho ricevuto un errore. Ora capisco che includere '.response' arriva all'oggetto giusto. – Leo

+1

Funziona ma non mostra i parametri passati all'URL. – djangofan

7

è possibile vedere tutte le informazioni delle richieste HTTParty invia per prima impostazione:

class Example 
    include HTTParty 
    debug_output STDOUT 
end 

Quindi stamperà le informazioni sulla richiesta, incluso l'URL, nella console.

+0

Questo è veramente utile. Accetterò la risposta @victorkohl fornita perché è più direttamente applicabile, ma come approccio generale al debug questo è ottimo. – Leo

+0

Ottengo un 'NoMethodError: metodo indefinito 'debug_output' per HTTParty: errore Module'. – infused

+0

@infused scusa per quello, ho aggiornato la risposta – DiegoSalazar

Problemi correlati