Ruby 스크립트의 HTTP/HTTPS 요청 캡처하기 (net/http, http gem)
이 글에서는 Ruby 스크립트(net/http와 http) 라이브러리의 HTTP/HTTPS 트래픽을 캡처하는 방법을 보여드립니다.
이 글에서 다룰 내용:
- Proxyman으로 Ruby 스크립트(net/http 또는 http gem)의 HTTP/HTTPS 트래픽을 캡처하는 방법
1. Ruby로 HTTPS 요청 보내기
Ruby 개발자라면 다음 라이브러리로 HTTP(S) 요청을 보내는 데 많은 시간을 쓸 수 있습니다:
- Net::HTTP: Ruby에 내장된 라이브러리입니다. HTTP 요청-응답 프로토콜을 사용하는 클라이언트를 구현할 수 있도록 풍부한 API를 제공합니다.
- http: 서드파티 젬입니다. Net::HTTP보다 사용하기 쉬운 클라이언트 라이브러리로 설계되었습니다.
다음 샘플 코드는 두 라이브러리로 요청을 보내는 방법을 보여줍니다.
require "http"
require 'net/http'
# Use net/http
uri = URI('https://httpbin.org/post?lib=net_http')
res = Net::HTTP.post_form(uri, 'isSSL' => 'true')
puts(res)
# Use http gem
res = HTTP.get("https://httpbin.org/get?lib=http").to_s
puts(res)
실행하려면 샘플을 client.rb로 저장한 다음, 터미널 앱을 열고 ruby client.rb를 실행하세요.

2. HTTP/HTTPS는 어떻게 캡처하나요?
현재의 문제점
기본적으로 두 라이브러리(net/http와 http gem) 모두 시스템 HTTP 프록시나 HTTP_PROXY, HTTPS_PROXY 환경 변수를 따르지 않습니다. Fiddler나 Charles Proxy 앱을 사용하고 있다면 이 트래픽이 보이지 않을 수 있습니다.
이를 해결하려면 프록시 설정을 직접 추가해야 합니다. 다음은 net/http의 설정 예시입니다:
proxy_addr = 'localhost'
proxy_port = 9090
Net::HTTP.new('example.com', nil, proxy_addr, proxy_port).start { |http|
# always proxy via localhost:9090
}
자세한 내용은 net::http Proxy에서 확인하세요.
소스 코드를 직접 수정해야 하므로 실수하기 쉽고 시간도 많이 걸립니다.
해결 방법 ✅
다행히 Proxyman에는 설정 없이 HTTP/HTTPS 요청과 응답을 캡처할 수 있는 기능이 있습니다.
- https://proxyman.com/에서 최신 macOS 앱을 다운로드하세요.
- Mac에 Proxyman 인증서를 설치하세요. Certificate 메뉴 → Install Certificate on this Mac… 를 연 다음 "Install & Trust" 버튼을 클릭하면 간단히 설치할 수 있습니다.

- Setup 메뉴 → Automatic을 열고 "New Terminal app…"을 클릭하세요.

- New Terminal app 창이 열립니다. 이는 미리 구성된 Apple 터미널 앱으로, Ruby의 HTTPS 트래픽을 자동으로 캡처하고 복호화합니다.
- 새 터미널 앱에서
ruby client.rb를 다시 실행하면, 이제 모든 HTTP/HTTPS 트래픽이 Proxyman에 의해 캡처되고 복호화됩니다 🎉

- 완료입니다.
- 내부 동작 방식이 궁금하다면 이 Automatic Setup 문서를 참고하세요.
- 직접 사용하는 터미널(iTerm2 또는 Hyper)을 쓰고 싶다면 Manual Setup 문서를 확인하세요.
지원되는 Ruby 라이브러리
Proxyman은 http, net/http, net/https, faraday, httparty, fastlane을 별도 설정 없이 기본으로 지원합니다.
결론
Ruby 스크립트(net/http 또는 http gem)의 HTTP/HTTPS 트래픽을 캡처하는 것은 실수하기 쉽고 시간도 오래 걸립니다. 하지만 Proxyman의 Automatic Setup을 사용하면 설정 없이 클릭 한 번으로 가능합니다.
이 설정은 Proxyman이 연 새 터미널 세션에만 적용되므로, Ruby 명령은 해당 창에서 실행하세요. 기존 셸 설정 파일은 변경되지 않습니다. 그래도 특정 라이브러리가 보이지 않는다면, 해당 라이브러리의 프록시 설정을 출력해 환경 변수 프록시를 비활성화하지 않았는지 확인하고, 같은 터미널에서 https://httpbin.org/get으로 간단한 요청을 보낼 수 있는지 확인하세요.
Proxyman은 고성능 macOS 앱으로, 개발자가 iOS 기기, iOS 시뮬레이터, Android 기기에서 실행되는 앱과 도메인의 HTTP(S) 트래픽을 캡처하고 검사할 수 있게 해 줍니다.
https://proxyman.com/에서 다운로드할 수 있습니다.
