如何查看对ActiveResource请求的HTTP响应?

时间:2008-10-22 23:31:01

标签: ruby-on-rails ruby activeresource

我正在尝试调试无效的ActiveResource调用。

查看ActiveResource请求的HTTP响应的最佳方法是什么?

9 个答案:

答案 0 :(得分:14)

Monkey修补连接以启用Net :: HTTP调试模式。见https://gist.github.com/591601 - 我写了它来解决这个问题。将此要点添加到您的rails应用程序将为您提供可用于打印调试信息的Net::HTTP.enable_debug!Net::HTTP.disable_debug!

Net :: HTTP调试模式不安全,不应在生产中使用,但对于调试非常有用。

答案 1 :(得分:4)

使用以下内容向名为config/initializers/的{​​{1}}添加新文件:

'debug_connection.rb'

这会将整个网络流量打印到$ stderr。

答案 2 :(得分:3)

我喜欢Wireshark因为您可以在Web浏览器客户端(通常是您的开发计算机)上启动它,然后执行页面请求。然后,您可以找到HTTP数据包,右键单击“Follow Conversation”以查看带有标头来回的HTTP。

答案 3 :(得分:3)

这很容易。看看回来的反应。 :)

两个选项:

  • 您的计算机上有源文件。编辑它。将puts response.inspect放在适当的位置。请记得将其删除。
  • Ruby有开放课程。找到正确的方法并重新定义它以完全按照您的意愿执行,或使用别名和调用链接来执行此操作。可能有一种方法可以返回响应 - 抓取它,打印它然后返回它。

这是后一种选择的一个愚蠢的例子。

# Somewhere buried in ActiveResource:
class Network
  def get
    return get_request
  end

  def get_request
    "I'm a request!"
  end
end

# Somewhere in your source files:
class Network
  def print_request
    request = old_get_request
    puts request
    request
  end
  alias :old_get_request :get_request
  alias :get_request :print_request
end

想象一下,第一个类定义在ActiveRecord源文件中。第二个类定义在你的应用程序的某个地方。

$ irb -r openclasses.rb 
>> Network.new.get
I'm a request!
=> "I'm a request!"

你可以看到它打印它然后返回它。干净,是吗?

(虽然我的简单示例没有使用它,因为它没有使用Rails,请查看alias_method_chain以结合您的别名调用。)

答案 4 :(得分:1)

仅当您还控制服务器时才有效:

按照服务器日志删除调用的URL:

Completed in 0.26889 (3 reqs/sec) | Rendering: 0.00036 (0%) | DB: 0.02424 (9%) | 200 OK [http://localhost/notifications/summary.xml?person_id=25738]

然后在Firefox中打开它。如果服务器真的是RESTful(即无状态),您将获得与ARes相同的响应。

答案 5 :(得分:0)

也许最好的方法是使用流量嗅探器。

(这完全有用......除了我的情况,我想看到的流量是加密的。噢哦!)

答案 6 :(得分:0)

或者当我不知道确切的内部结构时,我的方法就是抛出一个“调试器”语句,使用“script / server --debugger”启动服务器,然后逐步执行代码直到我在我想要的地方,然后在IRB开始一些检​​查.....这可能会有所帮助(嘿Luke顺便说一句)

答案 7 :(得分:0)

我在这里使用TCPFlow来观看通过网络传输的流量,而不是修补我的应用以输出它。

答案 8 :(得分:-1)

firefox插件实时http标头(http://livehttpheaders.mozdev.org/)非常适合这一点。或者您可以使用http://www.httpviewer.net/

等网站工具