Estoy intentando depurar una llamada de ActiveResource que no funciona.¿Cómo veo la respuesta HTTP a una solicitud de ActiveResource?
¿Cuál es la mejor manera de ver la respuesta HTTP a la solicitud que hace ActiveResource?
Estoy intentando depurar una llamada de ActiveResource que no funciona.¿Cómo veo la respuesta HTTP a una solicitud de ActiveResource?
¿Cuál es la mejor manera de ver la respuesta HTTP a la solicitud que hace ActiveResource?
Es fácil. Solo mira la respuesta que regresa. :)
dos opciones:
puts response.inspect
en el lugar apropiado. Recuerde quitarlo.Aquí hay un ejemplo tonto de esta última opción.
# 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
Imagine que la primera definición de clase está en los archivos fuente de ActiveRecord. La segunda definición de clase está en su aplicación en alguna parte.
$ irb -r openclasses.rb
>> Network.new.get
I'm a request!
=> "I'm a request!"
Puede ver que lo imprime y luego lo devuelve. Limpio, ¿eh?
(. Y aunque mi ejemplo sencillo no lo usa, ya que no está utilizando rieles, echa un vistazo a alias_method_chain
combinar sus llamadas alias)
Tal vez la mejor manera es utilizar un rastreador de tráfico.
(que trabajaría totalmente ... excepto en mi caso el tráfico que quiero ver es encriptada. D'oh!)
O mi método de entrar en las cosas cuando no sé las partes internas exactas es literalmente solo lanzar una declaración de "depurador", iniciar el servidor usando "script/server --debugger" y luego recorrer el código hasta que esté en el lugar que quiero, luego comenzar a inspeccionar allí mismo en IRB. .... eso podría ayudar (hey Luke por cierto)
Me gusta Wireshark porque puede comenzar a escucharlo en el extremo del cliente del navegador (generalmente su máquina de desarrollo) y luego hacer una solicitud de página. Luego puede encontrar los paquetes HTTP, haga clic con el botón derecho y "Seguir conversación" para ver el HTTP con los encabezados yendo y viniendo.
Esto sólo funciona si también controlar el servidor:
Siga el registro del servidor y el pescado a cabo la URL que se llamó:
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]
y abra que en Firefox. Si el servidor es verdaderamente RESTful (es decir, sin estado) obtendrá la misma respuesta que ARes.
el complemento de Firefox encabezados http en vivo (http://livehttpheaders.mozdev.org/) es ideal para esto. O puede utilizar una herramienta de sitio web como http://www.httpviewer.net/
Monkey parche la conexión para habilitar el modo de depuración Net :: HTTP. Ver https://gist.github.com/591601 - Lo escribí para resolver precisamente este problema.Agregar esta esencia a su aplicación de rieles le dará Net::HTTP.enable_debug!
y Net::HTTP.disable_debug!
que puede usar para imprimir información de depuración.
Net :: El modo de depuración HTTP es inseguro y no debe utilizarse en producción, pero es extremadamente informativo para la depuración.
añadir un nuevo archivo llamado a config/initializers/
'debug_connection.rb'
con el siguiente contenido:
class ActiveResource::Connection
# Creates new Net::HTTP instance for communication with
# remote service and resources.
def http
http = Net::HTTP.new(@site.host, @site.port)
http.use_ssl = @site.is_a?(URI::HTTPS)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
http.read_timeout = @timeout if @timeout
# Here's the addition that allows you to see the output
http.set_debug_output $stderr
return http
end
end
Esto imprimirá todo el tráfico de red a $ stderr.
Usaría TCPFlow aquí para ver el tráfico que pasa por el cable, en lugar de reparar mi aplicación para generarlo.
El proxy HTTPS de Charles es muy útil para este tipo de cosas. –