How to debug/display request sent using RestClient

前端 未结 5 1328
执念已碎
执念已碎 2021-02-03 18:37

I am trying to use RestClient to access a webservice using post method. I am sending the authorization token as specified but I am still getting a 403 status error which means I

相关标签:
5条回答
  • 2021-02-03 19:14

    You could try enabling RestClient's logging and see whether this provides any useful output:

    RESTCLIENT_LOG=stdout path/to/my/program
    

    or if you are using Rails

    RESTCLIENT_LOG=stdout bundle exec passenger
    

    replacing passenger with your choice of server. This will redirect all logging to standard output (your console).

    Personally I prefer using more verbose tools when I need to inspect or troubleshoot HTTP requests.

    You could try curl or wget if you prefer command-line, or one of the many browser extensions which let you perform requests easily, inspect output, save for future use, set up different environments etc. Both Postman and Advanced REST Client are good choices.

    0 讨论(0)
  • 2021-02-03 19:17

    If you're doing more of a REPL kind of development, it can be as easy as adding

    RestClient.log = 'stdout'
    

    to your code.

    You can find other valid values in the docs.

    0 讨论(0)
  • 2021-02-03 19:17

    In case you don't know (or want to bother) to pass in env. variable to your app (in my case it was Passenger/Rails), do something similar:

    $ 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
    
    0 讨论(0)
  • 2021-02-03 19:18

    If you craft a request manually, you can use inspect to show the full 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 讨论(0)
  • 2021-02-03 19:23

    You can also get the request from the exception:

    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 讨论(0)
提交回复
热议问题