2008-10-22 39 views

Trả lời

3

Thật dễ dàng. Chỉ cần nhìn vào phản ứng quay lại. :)

Hai lựa chọn:

  • Bạn có file nguồn trên máy tính của bạn. Chỉnh sửa nó. Đặt puts response.inspect vào vị trí thích hợp. Nhớ xóa nó đi.
  • Ruby có các lớp học mở. Tìm đúng phương pháp và xác định lại phương thức đó để thực hiện chính xác những gì bạn muốn hoặc sử dụng bí danh và chuỗi cuộc gọi để thực hiện việc này. Có lẽ một phương thức trả về phản hồi - lấy nó, in nó, và sau đó trả lại nó.

Đây là ví dụ ngớ ngẩn của tùy chọn thứ hai.

# 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 

Hãy tưởng tượng định nghĩa lớp đầu tiên nằm trong tệp nguồn ActiveRecord. Định nghĩa lớp thứ hai nằm trong ứng dụng của bạn ở đâu đó.

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

Bạn có thể thấy nó in và sau đó trả về. Neat, huh?

(. Và mặc dù ví dụ đơn giản của tôi không sử dụng nó vì nó không được sử dụng Rails, hãy kiểm tra alias_method_chain để kết hợp các cuộc gọi bí danh của bạn)

0

Có lẽ cách tốt nhất là sử dụng trình thám thính giao thông.

(nào hoàn toàn có thể làm việc ... ngoại trừ trong trường hợp của tôi lưu lượng Tôi muốn nhìn thấy được mã hóa. D'oh!)

+0

Proxy HTTPS của Charles rất hữu ích cho loại điều này. –

0

Hoặc phương pháp của tôi nhận được vào thứ khi tôi không biết chính xác internals theo nghĩa đen chỉ để ném vào một tuyên bố "trình gỡ rối", khởi động máy chủ bằng "script/server --debugger" và sau đó bước qua mã cho đến khi tôi ở nơi tôi muốn, sau đó bắt đầu kiểm tra ngay tại đó trong IRB. .... có thể giúp đỡ (hey Luke btw)

3

Tôi thích Wireshark vì bạn có thể bắt đầu nghe trên đầu trình duyệt web (thường là máy phát triển của bạn) và sau đó thực hiện yêu cầu trang. Sau đó, bạn có thể tìm thấy các gói HTTP, nhấp chuột phải và "Follow Conversation" để xem HTTP với các tiêu đề đi qua lại.

1

chỉ này hoạt động nếu bạn cũng kiểm soát máy chủ:

Theo dõi nhật ký máy chủ và tìm ra URL được gọi là:

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] 

và sau đó mở trong Firefox. Nếu máy chủ là đúng RESTful (tức là không quốc tịch), bạn sẽ nhận được phản hồi tương tự như ARes đã làm.

14

Khỉ vá kết nối để bật Net :: Chế độ gỡ lỗi HTTP. Xem https://gist.github.com/591601 - Tôi đã viết nó để giải quyết chính xác vấn đề này.Thêm ý chính này vào ứng dụng đường ray của bạn sẽ cung cấp cho bạn Net::HTTP.enable_debug!Net::HTTP.disable_debug! mà bạn có thể sử dụng để in thông tin gỡ lỗi.

Net :: Chế độ gỡ lỗi HTTP không an toàn và không được sử dụng trong sản xuất, nhưng cực kỳ thông tin để gỡ lỗi.

+0

Điều này hoạt động tốt! – huug

+1

Cảm ơn, bạn vừa mới tiết kiệm cho tôi rất nhiều thời gian! – awendt

+0

Rất hữu ích, cảm ơn rất nhiều! – Geoffroy

4

Thêm một tập tin mới để config/initializers/ gọi 'debug_connection.rb' với nội dung sau:

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 

này sẽ in ra lưu lượng mạng toàn đến $ stderr.

0

Tôi muốn sử dụng TCPFlow đây để xem lưu lượng truy cập vượt qua dây dẫn, thay vì vá ứng dụng của tôi để xuất nó.

Các vấn đề liên quan