http-2vsmechanize
Pure Ruby, framework and transport agnostic, implementation of HTTP/2 protocol and HPACK header compression with support for:
- Binary framing parsing and encoding
- Stream multiplexing and prioritization
- Connection and stream flow control
- Header compression and server push
- Connection and stream management
- And more... see API docs
Protocol specifications:
- Hypertext Transfer Protocol Version 2 (RFC 7540)
- HPACK: Header Compression for HTTP/2 (RFC 7541)
Mechanize is a Ruby library for automating interaction with websites. It automatically stores and sends cookies, follows redirects, and can submit forms — making it behave like a web browser without needing an actual browser engine.
Key features include:
- Automatic cookie management Stores cookies received from servers and sends them back on subsequent requests, maintaining session state across multiple pages.
- Form handling Can find, fill in, and submit HTML forms programmatically. Supports text inputs, selects, checkboxes, radio buttons, and file uploads.
- Link following Navigate through pages by clicking links using their text content, CSS selectors, or href patterns.
- History and back/forward Maintains a browsing history, allowing you to go back and forward through visited pages.
- HTTP authentication Supports basic and digest HTTP authentication.
- Proxy support Can route requests through HTTP proxies.
- Redirect handling Automatically follows HTTP redirects (configurable).
Mechanize is one of the oldest and most established web interaction libraries in Ruby. It is best suited for scraping traditional server-rendered websites with forms and multi-page workflows. For JavaScript-heavy sites, a browser automation tool like Selenium or Playwright is recommended instead.
Highlights
http2
popularproduction
Example Use
```ruby
require 'http/2'
# GET request
client = HTTP2::Client.new
response = client.get("https://httpbin.org/get")
puts response.body
# POST reuqest
data = { name: "value" }
response = client.post("https://www.example.com", data)
```
```ruby
require 'mechanize'
agent = Mechanize.new
# Navigate to a page
page = agent.get('https://example.com')
puts page.title
# Find and click a link
page = page.link_with(text: 'Products').click
# Extract data from the page
page.search('.product').each do |product|
name = product.at('.name').text
price = product.at('.price').text
puts "#{name}: #{price}"
end
# Fill in and submit a login form
login_page = agent.get('https://example.com/login')
form = login_page.form_with(action: '/login')
form['username'] = 'user@example.com'
form['password'] = 'password123'
dashboard = agent.submit(form)
# Cookies are maintained automatically
puts dashboard.title # "Dashboard"
# Download a file
agent.get('https://example.com/report.csv').save('report.csv')
```