Pages

Thursday, 18 August 2022

chuck

 Debugging http proxy like CharlesProxy。

Chuck - A Debugging HTTP Proxy in Ruby。

You can intercept requests, redirect or rewrite them using simple callbacks.

Features

  • Add, modify or delete headers.
  • Do conditional rewrite based on request headers.
  • Combine multiple profiles, chain rules.
  • Generally, be more creative and productive.

Setup

Install sqlite3 development libraries

# OSX
brew install sqlite3
# debian
sudo apt-get install libsqlite3-dev

Install the gem dependencies next

bundle --path gems --binstubs

Profile

You need to setup a profile for rewriting urls. You can find a sample in profiles/sample.rb

map 'http://www.google.com',    'http://www.google.com.au'
map 'http://www.google.com.au', 'http://localhost:3000'

scope 'www.google.com', 443 do
  connect 'github.com', 443
  map 'https://github.com/', 'https://github.com/dashboard' do |request|
    request.headers.replace 'Host', 'github.com'
  end

  on_response do |response|
    response.headers.replace 'X-FooBar-Key', 'test'
  end
end

mock 'http://www.cnn.com', Class.new(Sinatra::Base) { get(%r{/.*}) { 'hot news'} }

on_request 'example.com' do |request|
  halt_request(request, 200, {}, 'hello world!')
end

Running

./bin/chuck -p <port> -f <profile>

The 'Hello World' Chuck Example

# terminal/screen 1
./bin/foreman start

# terminal/screen 2
curl -v -k --proxy 127.0.0.1:8080 http://www.google.com/hello-world
curl -v -k --proxy 127.0.0.1:8080 https://www.google.com/
curl -v -k --proxy 127.0.0.1:8080 http://www.cnn.com/

Logs

Go to http://localhost:8081/ or whatever url chuck displays.

Chuck SSL CA

Chuck uses a self-signed certificate to construct SSL certificates on the fly. This will trigger warnings in your browser or applications.

To get around those, add Chuck's cerificate as a trusted authority in your browser or mobile device.

  • iPhone, Android: navigate to the CA url displayed on console when you run Chuck
  • Firefox, etc: Add certs/server.crt to your trusted certificates list
  • openssl on debian:
sudo cp certs/server.crt /etc/ssl/certs/chuck-proxy.pem
cd /etc/ssl/certs
sudo ln -s chuck-proxy.pem `openssl x509 -noout -hash -in chuck-proxy.pem`.0
cd -

See Also

https://github.com/igrigorik/em-proxy

from https://github.com/deepfryed/chuck

No comments:

Post a Comment