Как проверить/отладить/просмотреть и т. д. запрос, сгенерированный RestClient?

У меня действительно странная проблема: когда я пытаюсь получить доступ к URL-адресу с помощью RestClient, время ожидания истекает. Если я получаю доступ к URL-адресу непосредственно из оболочки (используя curl), он загружается нормально. Я могу получить доступ к другим URL-адресам, таким как Google, через RestClient.

Кроме того, если я использую Net::HTTP напрямую и отправляю запрос GET, он проходит (!!).

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

Как я могу увидеть полный http-запрос, который делает RestClient?

Ниже приведен код, описывающий проблему:

irb(main):002:0> RestClient.log
=> nil
irb(main):003:0> RestClient.get my_bad_uri
RestClient::RequestTimeout: Request Timeout
    from /myapp/vendor/bundle/ruby/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:427:in `rescue in transmit'
    from /myapp/vendor/bundle/ruby/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:350:in `transmit'
    from /myapp/vendor/bundle/ruby/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:176:in `execute'
    from /myapp/vendor/bundle/ruby/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:41:in `execute'
    from /myapp/vendor/bundle/ruby/2.1.0/gems/rest-client-1.7.2/lib/restclient.rb:65:in `get'
    from (irb):3
    from /myapp/vendor/bundle/ruby/2.1.0/gems/railties-3.2.18/lib/rails/commands/console.rb:47:in `start'
    from /myapp/vendor/bundle/ruby/2.1.0/gems/railties-3.2.18/lib/rails/commands/console.rb:8:in `start'
    from /myapp/vendor/bundle/ruby/2.1.0/gems/railties-3.2.18/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:33:in `require'
    from script/rails:33:in `<main>'

irb(main):004:0> RestClient.get "https://google.com" #google works
=> "<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"en\"><head><meta content=\"Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.\" name=\"description\"><meta content=\"noodp\" name=\"robots\"><meta content=\"/images/google_favicon_128.png\" itemprop=\"image\"><title>Google</title><script>(function(){window.google={kEI:'WjDtU_GDMo_8oAT0woBw',kEXPI:'4791,17259,4000116,4003510,4007661,4008142,4009033,4010073,4010806,4010858,4010899,4011228,4011258,4011679,4012373,4012504,4013414,4013591,4013723,4013823,4013967,4013979,4014016,4014033,4014431,4014515,4014636,4014805,4014991,4015234,4015266,4015550,4015587,4015772,4016127,4016279,4016309,4016373,4016487,4016824,4016976,4017204,4017285,4017595,4017639,4

Благодарю вас!


person SharkLaser    schedule 14.08.2014    source источник
comment
Используйте wireshark для анализа сетевого трафика. Конечно, вы можете использовать Ethereal, или tcpdump, или... ну, вы поняли идею. Сетевой анализатор. Их много.   -  person Parthian Shot    schedule 15.08.2014
comment
@ParthianShot По причинам, выходящим за рамки этого комментария, для меня это не вариант :/   -  person SharkLaser    schedule 15.08.2014


Ответы (1)


Поскольку в журналах ошибок есть ссылки на некоторые строки кода и, в частности, на блок восстановления (/lib/restclient/request.rb:427:in 'rescue in transfer'), вы можете открыть гем и добавить некоторые журналы/пути/ операторы в этих методах, чтобы попытаться выяснить, где в цепочке это зависает. Это не супер хирургия, но может направить вас в правильном направлении. Если вы используете упаковщик, я думаю, вы можете запустить bundle open restclient, а затем копаться в исходном коде драгоценного камня.

person Jacques Betancourt    schedule 15.08.2014