Tôi đang cố gỡ lỗi cuộc gọi ActiveResource không hoạt động.Làm cách nào để xem phản hồi HTTP đối với yêu cầu ActiveResource?
Cách tốt nhất để xem phản hồi HTTP theo yêu cầu mà ActiveResource đang tạo ra là gì?
Tôi đang cố gỡ lỗi cuộc gọi ActiveResource không hoạt động.Làm cách nào để xem phản hồi HTTP đối với yêu cầu ActiveResource?
Cách tốt nhất để xem phản hồi HTTP theo yêu cầu mà ActiveResource đang tạo ra là gì?
Thật dễ dàng. Chỉ cần nhìn vào phản ứng quay lại. :)
Hai lựa chọn:
puts response.inspect
vào vị trí thích hợp. Nhớ xóa nó đi.Đâ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)
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!)
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)
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.
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.
tiêu đề http của plugin firefox trực tiếp (http://livehttpheaders.mozdev.org/) là điều tuyệt vời cho việc này. Hoặc bạn có thể sử dụng công cụ trang web như http://www.httpviewer.net/
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!
và 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.
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.
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ó.
Proxy HTTPS của Charles rất hữu ích cho loại điều này. –