Postメソッドを使用してRestClientを使用してWebサービスにアクセスしようとしています。指定されたとおりに認証トークンを送信していますが、403ステータスエラーが引き続き表示されます。これは、そのAPIの使用が禁止されていることを意味します。ヘッダーを確認できるように、HTTPポストで送信されているリクエストを確認する方法はありますか?私はそれを行う方法について言及している例やドキュメントを見つけることができませんか?
私のコードはこれに似ています:
token = get_token
response = RestClient.post "https://api-dev.xxx.com/software/services/search/ABC",
:authorization => "Bearer #{token}"
RestClient
のロギングを有効にして、これが有用な出力を提供するかどうかを確認できます。
RESTCLIENT_LOG=stdout path/to/my/program
またはRailsを使用している場合
RESTCLIENT_LOG=stdout bundle exec passenger
passenger
を選択したサーバーに置き換えます。これにより、すべてのロギングが標準出力(コンソール)にリダイレクトされます。
個人的には、HTTP要求を検査またはトラブルシューティングする必要がある場合、より詳細なツールを使用することを好みます。
コマンドラインを使用する場合はcurl
またはwget
を試すか、リクエストを簡単に実行したり、出力を検査したり、将来の使用のために保存したり、さまざまな環境を設定したりできるブラウザ拡張機能の1つを使用できます。 Postman と Advanced REST Client の両方が適切な選択です。
より多くのREPL種類の開発を行っている場合、追加するのと同じくらい簡単です
RestClient.log = 'stdout'
あなたのコードに。
ドキュメント内の他の有効な値 を見つけることができます。
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
リクエストを手動で作成する場合は、 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
例外からリクエストを取得することもできます:
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