2015-05-13 5 views
11

Ich möchte die vollständige URL betrachten, die der HTTParty-Edelstein aus meinen Parametern erstellt hat, entweder vor oder nach der Übermittlung, es spielt keine Rolle.Wie überprüfe ich die vollständige URL, die von HTTParty generiert wird?

Ich würde auch gerne greifen dies aus dem Antwortobjekt, aber ich sehe auch keinen Weg, dies zu tun.

(Bit von Hintergrund)

Ich baue einen Wrapper für eine API der HTTParty gem verwenden. Es funktioniert weitgehend, aber gelegentlich bekomme ich eine unerwartete Antwort von der Gegenstelle, und ich möchte herausfinden, warum - ist es etwas, das ich falsch gesendet habe? Wenn ja, was? Habe ich irgendwie die Anfrage falsch gemacht? Ein Blick auf die rohe URL wäre gut für die Fehlersuche, aber ich kann nicht sehen, wie.

Zum Beispiel:

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

Vermutlich erzeugt:

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

Aber wie kann ich das überprüfen?

In einem Fall habe ich dies:

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

Aber es hat nicht funktioniert. Durch das Experimentieren war ich in der Lage, dies zu produzieren, die gearbeitet:

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

So klar Standard Ansatz der HTTParty die Abfragezeichenfolge zu bilden, nicht mit dem API-Designer-Format bevorzugt haben auszurichten. Das ist in Ordnung, aber es war peinlich genau herauszufinden, was gebraucht wurde.

Antwort

18

Sie haben die Basis-URI in Ihrem Beispiel nicht übergeben, also würde es nicht funktionieren.

dass korrigieren, können Sie die gesamte URL wie folgt erhalten:

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

eine Klasse verwenden:

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

Ja, das wird tatsächlich aus einer Unterklasse kopiert, also wird 'base_uri' gesetzt. Ich werde es korrigieren. Vielen Dank! – Leo

+0

Ah, ich verstehe es! Ich habe 'res.last_uri' versucht, aber einen Fehler bekommen. Ich sehe jetzt, dass einschließlich ".response" zum richtigen Objekt gelangt. – Leo

+1

Funktioniert, zeigt jedoch nicht die an die URL übergebenen Parameter an. – djangofan

7

Sie können alle Informationen der Anfragen sehen HTTParty durch erste Einstellung sendet:

class Example 
    include HTTParty 
    debug_output STDOUT 
end 

Dann wird es die Anfrage Informationen, einschließlich URL, auf der Konsole drucken.

+0

Das ist wirklich nützlich. Ich werde die Antwort @victorkohl akzeptieren, da sie direkter anwendbar ist, aber als allgemeiner Ansatz zum Debuggen ist das großartig. – Leo

+0

Ich bekomme eine 'NoMethodError: undefinierte Methode 'debug_output' für HTTParty: Module' Fehler. – infused

+0

@infused Entschuldigung, aktualisiert die Antwort – DiegoSalazar

Verwandte Themen