2014-05-05 4 views
25

Ich versuche, RestClient zu verwenden, um mit der post-Methode auf einen Webservice zuzugreifen. Ich sende das Berechtigungstoken wie angegeben, aber ich bekomme immer noch einen 403-Statusfehler, was bedeutet, dass ich diese API nicht benutzen darf. Gibt es eine Möglichkeit, dass ich die Anfrage mit http-Post gesendet, so dass ich die Header überprüfen kann? Ich finde kein Beispiel oder irgendeine Dokumentation, die erwähnt, wie das geht?Wie debugge/zeige ich die Anfrage an, die mit RestClient gesendet wurde

Mein Code ist ähnlich wie folgt aus:

token = get_token 

response = RestClient.post "https://api-dev.xxx.com/software/services/search/ABC", 
    :authorization => "Bearer #{token}" 

Antwort

20

Sie könnten versuchen, RestClient ‚s Protokollierung ermöglicht und sehen, ob dies eine nützliche Ausgabe bereitstellt:

RESTCLIENT_LOG=stdout path/to/my/program 

oder wenn Sie mit Rails

RESTCLIENT_LOG=stdout bundle exec passenger 

ersetzen passenger mit Ihrer Wahl des Servers. Dadurch wird die gesamte Protokollierung auf die Standardausgabe (Ihre Konsole) umgeleitet.

Persönlich bevorzuge ich die Verwendung von ausführlicheren Tools, wenn ich HTTP-Anfragen untersuchen oder beheben muss.

könnten Sie versuchen, curl oder wget, wenn Sie Befehlszeile bevorzugen, oder eine der vielen Browser-Erweiterungen, die Sie Anfragen leicht durchführen lassen, Ausgabe überprüfen, für die zukünftige Verwendung speichern, einrichten verschiedenen Umgebungen usw. Sowohl Postman und Advanced REST Client sind gute Auswahl.

+1

Nur weil es anfangs für mich verwirrend war, wenn du Heroku benutzt, ist dies auch der Weg, es zu tun. Verwenden Sie einfach 'heroku config: set RESTCLIENT_LOG = stdout' – WattsInABox

+0

Was ist Pfad/zu/meinem/Programm hier? Wenn ich den Pfad zu meinem Projekt verwende, schlägt der Befehl fehl: "ist ein Verzeichnis ..." Jede Hilfe wird geschätzt – halbano

+1

@halbano: Dies ist eine Shell-Syntax, die eine Umgebungsvariable nur im angegebenen Befehl definiert. Hier sollte 'path/to/my/program' der Shell-Befehl sein, der zum Ausführen Ihrer Anwendung verwendet wird. – RichouHunter

1

Für den Fall, dass Sie nicht wissen (oder wollen), env zu übergeben. Variable, um Ihre Anwendung (in meinem Fall war es Passagier-/Rails), etwas Ähnliches tun:

$ cat >/usr/share/foreman/config/initializers/00_rest_client.rb <<'EOT' 
require 'rest_client' 
RestClient.log = 
    Object.new.tap do |proxy| 
    def proxy.<<(message) 
     Rails.logger.info message 
    end 
    end 
EOT 
39

Wenn Sie eher eine REPL Art von Entwicklung zu tun, kann es so einfach sein wie

RestClient.log = 'stdout' 
Hinzufügen

zu Ihrem Code.

Sie können other valid values in the docs finden.

+7

Ich sehe den Hauptteil der POST-Anfrage nicht. –

Verwandte Themen