it-roy-ru.com

Как отладить/отобразить запрос, отправленный с помощью RestClient

Я пытаюсь использовать RestClient для доступа к веб-сервису, используя метод post. Я отправляю токен авторизации, как указано, но я все еще получаю ошибку статуса 403, что означает, что мне запрещено использовать этот API. Можно ли как-то увидеть, что запрос отправляется с http-постом, чтобы я мог проверить заголовки? Я не могу найти ни одного примера или какой-либо документации, в которой упоминается, как это сделать?

Мой код похож на это:

token = get_token

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

Вы можете попробовать включить ведение журнала RestClient и посмотреть, дает ли это полезный вывод:

RESTCLIENT_LOG=stdout path/to/my/program

или если вы используете Rails

RESTCLIENT_LOG=stdout bundle exec passenger

заменив passenger на ваш выбор сервера. Это перенаправит все журналы на стандартный вывод (ваша консоль).

Лично я предпочитаю использовать более подробные инструменты, когда мне нужно проверять или устранять неполадки HTTP-запросов. 

Вы можете попробовать curl или wget, если вы предпочитаете командную строку, или одно из многих расширений браузера, которые позволяют легко выполнять запросы, проверять вывод, сохранять для будущего использования, настраивать различные среды и т.д. Оба Почтальон и Расширенный REST клиент - это хороший выбор.

22
Kostas Rousis

Если вы делаете больше разработки REPL, это может быть так же просто, как добавить

RestClient.log = 'stdout'

к вашему коду. 

Вы можете найти другие допустимые значения в документах .

48
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
1
lzap

Если вы создаете запрос вручную, вы можете использовать осмотреть чтобы показать полный 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
0
xsunsmile