web-dev-qa-db-ja.com

RestClientを使用して送信されたリクエストをデバッグ/表示する方法

Postメソッドを使用してRestClientを使用してWebサービスにアクセスしようとしています。指定されたとおりに認証トークンを送信していますが、403ステータスエラーが引き続き表示されます。これは、そのAPIの使用が禁止されていることを意味します。ヘッダーを確認できるように、HTTPポストで送信されているリクエストを確認する方法はありますか?私はそれを行う方法について言及している例やドキュメントを見つけることができませんか?

私のコードはこれに似ています:

token = get_token

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

RestClientのロギングを有効にして、これが有用な出力を提供するかどうかを確認できます。

RESTCLIENT_LOG=stdout path/to/my/program

またはRailsを使用している場合

RESTCLIENT_LOG=stdout bundle exec passenger

passengerを選択したサーバーに置き換えます。これにより、すべてのロギングが標準出力(コンソール)にリダイレクトされます。

個人的には、HTTP要求を検査またはトラブルシューティングする必要がある場合、より詳細なツールを使用することを好みます。

コマンドラインを使用する場合はcurlまたはwgetを試すか、リクエストを簡単に実行したり、出力を検査したり、将来の使用のために保存したり、さまざまな環境を設定したりできるブラウザ拡張機能の1つを使用できます。 PostmanAdvanced REST Client の両方が適切な選択です。

26
Kostas Rousis

より多くのREPL種類の開発を行っている場合、追加するのと同じくらい簡単です

RestClient.log = 'stdout'

あなたのコードに。

ドキュメント内の他の有効な値 を見つけることができます。

54
Marius Butuc

Envを渡すことがわからない(または気にする)場合。アプリの変数(私の場合はPassenger/Railsでした)、同様のことを行います:

$ 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
2
lzap

リクエストを手動で作成する場合は、 inspect を使用して完全なURLを表示できます

req = RestClient::Request.new(
    :method => :post,
    :url => "https://api-dev.xxx.com/software/services/search/ABC",
    headers: {params:{:authorization => "Bearer #{token}"}})

puts req.inspect
1
xsunsmile

例外からリクエストを取得することもできます:

def bla(token)
  response = RestClient.post "https://api-dev.xxx.com/software/services/search/ABC", :authorization => "Bearer #{token}"
rescue RestClient::Exception => e
   @logger.error "#{e.response.request.inspect}"
end 
0
thi gg