Opensaz
This is my first serious repo.!
It's a Ruby Gem.
It's used to read .saz file(generated by Fiddler, consist of HTTP requests and responses).
Installation
$ gem install opensaz
Usage
Read .saz file
A .saz file is simply a compressed file. You can extract it with 7zip. The folder structure and content after extraction are very clear.
The first time when you call Opensaz.read('any.saz')
, it will extract all the contents into folder any_#{md5}
. The next time you run it, as any_#{md5}
already exists(unless you remove it), this function will return the path directly instead of extracting the content again.
# will create folder like https_e5125274177355d294051e92098a2e58
a = Opensaz.read("/Users/keegoo/workspace/https.saz")
Packages
A package
is an HTTP interaction(request and response) between client and server.
Typically a package
consist of id
, comment
, request
and response
.
id: is the number in the first column of packages-list in Fiddler UI.
comment: in Fiddler UI, you can add comment for each package.
request: a HTTP request.
response: a HTTP response.
require 'opensaz'
a = Opensaz.read("/Users/keegoo/workspace/entity.saz")
a.packages.each do |x|
puts x.id
puts x.comment
puts x.request.headers[:path]
puts x.request.headers[:method]
puts x.request.headers[:content_type]
puts x.request.body
puts x.response.headers
puts x.response.body
end
As a package
is either HTTP or HTTPS protocol, you could pass :http or :https to filter it.
It support :http, :https and :all(default value).
a.packages(:http).each do |x|
# do anything
end
You could use Ruby build-in methods select
to do some filtering.
a.packages.select{|x|x.comment =~ /some import message/}
a.packages.select{|x|x.request.headers[:content_type] == "text/xml"}
a.packages.select{|x|x.request.headers[:path].end_with?("api/batch")}
# list goes on ...
headers key name
Headers of both request and response have many fields.
package.request.headers
is a hash. The keys is simply fields name of request header, but with a bit modification.
e.g.:
Accept => :accept
Accept-Charset => :accept_charset
Cookie => :cookie
...
Same with response headers.
If a key(field) doesn't exist, it will be x.request.headers[:weird] = nil
which is how hash works in Ruby.
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/opensaz. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.