어떻게 보는 HTTP 응답을 ActiveResource 요청이 있으십니까?
-
03-07-2019 - |
문제
나는 디버깅하는 ActiveResource 는 작동하지 않습니다.
무엇을 볼 수있는 가장 좋은 방법은 HTTP 요청에 대한 응답 ActiveResource 은?
해결책
그것은 간단합니다. 돌아 오는 응답 만 살펴보십시오. :)
두 가지 옵션 :
- 컴퓨터에 소스 파일이 있습니다. 편집하십시오. a
puts response.inspect
적절한 장소에서. 제거해야합니다. - 루비에는 오픈 클래스가 있습니다. 올바른 방법을 찾고 원하는대로 정확하게 수행하거나 별명을 사용하고 연쇄 체인을 사용하여이를 재정의하십시오. 응답을 반환하는 메소드가있을 수 있습니다. 가져 가서 인쇄 한 다음 반환하십시오.
다음은 후자의 옵션에 대한 어리석은 예입니다.
# 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!"
인쇄 한 다음 반환하는 것을 볼 수 있습니다. 깔끔 했어?
(그리고 내 간단한 예제는 레일을 사용하지 않기 때문에 사용하지 않지만 확인하십시오. alias_method_chain
별칭 호출을 결합하려면.)
다른 팁
원숭이 패치 Net :: HTTP 디버그 모드를 활성화하기위한 연결. 보다 https://gist.github.com/591601 - 나는이 문제를 정확하게 해결하기 위해 그것을 썼다. Rails 앱 에이 요점을 추가하면됩니다. Net::HTTP.enable_debug!
그리고 Net::HTTP.disable_debug!
디버그 정보를 인쇄하는 데 사용할 수 있습니다.
Net :: HTTP 디버그 모드는 안전하지 않으며 생산에 사용해서는 안되지만 디버깅에 매우 유익합니다.
새 파일을 추가하십시오 config/initializers/
~라고 불리는 'debug_connection.rb'
다음 내용으로 :
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
이것은 전체 네트워크 트래픽을 $ stderr로 인쇄합니다.
좋아요 Wireshark 웹 브라우저 클라이언트 엔드 (일반적으로 개발 기계)에서 듣기 시작한 다음 페이지 요청을 수행 할 수 있기 때문입니다. 그런 다음 HTTP 패킷을 찾아 마우스 오른쪽 버튼을 클릭하고 "대화를 따르십시오"를 찾으려면 헤더가 앞뒤로 이동하는 HTTP를 볼 수 있습니다.
이 경우 당신은 또한 당신을 제어 server:
따라 서버 로그고 물고기는 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]
를 열고 다음에 들어 있습니다.는 경우 서버가 진정으로 편안(즉,.stateless)을 얻을 것 같은 응답을 아레스았다.
또는 정확한 내부를 알지 못할 때 사물에 들어가는 방법은 문자 그대로 "디버거"문을 던지고 "Script/Server -DeBugger"를 사용하여 서버를 시작한 다음 I SLE I COLE을 통해 코드를 진행하는 것입니다. 내가 원하는 곳에서 M, IRB에서 바로 검사를 시작합니다 ..... 도움이 될 수 있습니다 (Hey Luke BTW)
아마도 가장 좋은 방법은 트래픽 스나이퍼를 사용하는 것입니다.
(완전히 작동 할 것입니다 ... 내 경우를 제외하고 내가보고 싶은 트래픽은 암호화됩니다. d 'oh!)
나는 사용할 것이다 tcpflow 여기에서 트래픽이 전선을 넘어서서 내 앱을 출력하지 않고 전선을 넘어가는 것을 보았습니다.
Firefox 플러그인 라이브 HTTP 헤더 (http://livehttpheaders.mozdev.org/) 이것은 이것에 좋습니다. 또는 웹 사이트 도구와 같은 웹 사이트 도구를 사용할 수 있습니다 http://www.httpviewer.net/