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

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

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

token = get_token

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

person user3075906    schedule 05.05.2014    source источник


Ответы (5)


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

RESTCLIENT_LOG=stdout path/to/my/program

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

RESTCLIENT_LOG=stdout bundle exec passenger

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

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

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

person Kostas Rousis    schedule 05.05.2014
comment
Просто потому, что поначалу меня это сбивало с толку, если вы используете героку, это также способ сделать это. Просто используйте heroku config:set RESTCLIENT_LOG=stdout - person WattsInABox; 25.03.2016
comment
Что такое путь/к/моей/программе здесь? Если я использую путь к моему проекту, команда не говорит: это каталог... Любая помощь приветствуется - person halbano; 18.11.2017
comment
@halbano: это синтаксис оболочки, определяющий переменную среды только в данной команде. Здесь path/to/my/program должна быть команда оболочки, используемая для запуска вашего приложения. - person Richard-Degenne; 19.02.2018

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

RestClient.log = 'stdout'

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

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

person Marius Butuc    schedule 11.08.2015
comment
Я не вижу тело POST-запроса. - person B Seven; 21.12.2016

В случае, если вы не знаете (или хотите заморачиваться), чтобы передать 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
person lzap    schedule 14.04.2015

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

Вы также можете получить запрос из исключения:

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 
person thi gg    schedule 08.04.2019