2008-10-22 16 views

Respuesta

3

Es fácil. Solo mira la respuesta que regresa. :)

dos opciones:

  • Usted tiene el archivo de origen en el equipo. Editarlo. Ponga un puts response.inspect en el lugar apropiado. Recuerde quitarlo.
  • Ruby tiene clases abiertas. Encuentre el método correcto y redefinirlo para hacer exactamente lo que desee, o use alias y call chain para hacer esto. Probablemente haya un método que devuelva la respuesta: tómela, imprímala y luego devuélvala.

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)

0

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!)

+0

El proxy HTTPS de Charles es muy útil para este tipo de cosas. –

0

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)

3

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.

1

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.

14

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.

+0

¡Esto funciona bien! – huug

+1

¡Gracias, me has ahorrado mucho tiempo! – awendt

+0

¡Muy útil, muchas gracias! – Geoffroy

4

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.

0

Usaría TCPFlow aquí para ver el tráfico que pasa por el cable, en lugar de reparar mi aplicación para generarlo.

Cuestiones relacionadas