Skip to content

Commit ed75588

Browse files
author
August Lilleaas
committed
Adding all.
0 parents  commit ed75588

13 files changed

+156
-0
lines changed

README.textile

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
h1. Ruby Net::HTTP cheat sheet
2+
3+
A bunch of common HTTP use cases implemented with Ruby's <code>Net::HTTP</code> library.
4+
5+
h1. Fork
6+
7+
If you want to add or change something, fork and send me a pull request.

basic_auth.rb

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require "net/http"
2+
require "uri"
3+
4+
uri = URI.parse("http://google.com/")
5+
6+
http = Net::HTTP.new(uri.host, uri.port)
7+
request = Net::HTTP::Get.new(uri.request_uri)
8+
request.basic_auth("username", "password")
9+
response = http.request(request)

headers.rb

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require "net/http"
2+
require "uri"
3+
4+
uri = URI.parse("http://google.com/")
5+
http = Net::HTTP.new(uri.host, uri.port)
6+
7+
request = Net::HTTP::Get.new(uri.request_uri)
8+
request["User-Agent"] = "My Ruby Script"
9+
request["Accept"] = "*/*"
10+
11+
response = http.request(request)

normal.rb

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require "net/http"
2+
require "uri"
3+
4+
uri = URI.parse("http://google.com/")
5+
6+
# Shortcut
7+
response = Net::HTTP.get_response(uri)
8+
9+
# Will print response.body
10+
Net::HTTP.get_print(uri)
11+
12+
# Full
13+
http = Net::HTTP.new(uri.host, uri.port)
14+
response = http.request(Net::HTTP::Get.new(uri.request_uri))

post_form.rb

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require "net/http"
2+
require "uri"
3+
4+
uri = URI.parse("http://example.com/search")
5+
6+
# Shortcut
7+
response = Net::HTTP.post_form(uri, {"q" => "My query", "per_page" => "50"})
8+
9+
# Full control
10+
http = Net::HTTP.new(uri.host, uri.port)
11+
12+
request = Net::HTTP::Post.new(uri.request_uri)
13+
request.set_form_data({"q" => "My query", "per_page" => "50"})
14+
15+
response = http.request(request)

response.rb

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require "net/http"
2+
require "uri"
3+
4+
uri = URI.parse("http://google.com/")
5+
6+
http = Net::HTTP.new(uri.host, uri.port)
7+
request = Net::HTTP::Get.new(uri.request_uri)
8+
9+
response = http.request(request)
10+
11+
response.code # => 301
12+
response.body # => The body (HTML, XML, blob, whatever)
13+
# Headers are lowercased
14+
response["cache-control"] # => public, max-age=2592000

rest.rb

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Basic REST.
2+
# Most REST APIs will set semantic values in response.body and response.code.
3+
require "net/http"
4+
5+
http = Net::HTTP.new("api.restsite.com")
6+
7+
request = Net::HTTP::Post.new("/users")
8+
request.set_form_data({"users[login]" => "quentin"})
9+
response = http.request(request)
10+
# Use nokogiri, hpricot, etc to parse response.body.
11+
12+
request = Net::HTTP::Get.new("/users/1")
13+
response = http.request(request)
14+
# As with POST, the data is in response.body.
15+
16+
request = Net::HTTP::Delete.new("/users/1")
17+
response = http.request(request)
18+
19+
request = Net::HTTP::Put.new("/users/1")
20+
request.set_form_data({"users[login]" => "changed"})
21+
response = http.request(request)

shortcuts.rb

Whitespace-only changes.

ssl.rb

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require "net/https"
2+
require "uri"
3+
4+
uri = URI.parse("https://secure.com")
5+
http =
6+
http.use_ssl = true
7+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
8+
9+
request = Net::HTTP::Get.new(uri.request_uri)
10+
11+
response = http.request(request)
12+
response.body
13+
response.status
14+
response["header-here"] # All headers are lowercase

ssl_with_pem.rb

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
require "net/https"
2+
require "uri"
3+
4+
uri = URI.parse("https://secure.com")
5+
pem = File.read("/path/to/my.pem")
6+
http = Net::HTTP.new(uri.host, uri.port)
7+
http.use_ssl = true
8+
http.cert = OpenSSL::X509::Certificate.new(pem)
9+
http.key = OpenSSL::PKey::RSA.new(pem)
10+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
11+
12+
request = Net::HTTP::Get.new(uri.request_uri)

timeout.rb

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require "net/http"
2+
require "uri"
3+
4+
uri = URI.parse("http://google.com/")
5+
6+
http = Net::HTTP.new(uri.host, uri.port)
7+
http.open_timeout = 3 # in seconds
8+
http.read_timeout = 3 # in seconds
9+
http.request(Net::HTTP::Get.new(uri.request_uri))

uri.rb

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
require "uri"
2+
3+
uri = URI.parse("http://mysite.com/some_api")
4+
uri = URI.parse("https://mysite.com/thing?foo=bar")
5+
6+
# URI will also guess the correct port
7+
URI.parse("http://foo.com").port # => 80
8+
URI.parse("https://foo.com/").port # => 443
9+
10+
# Full reference
11+
uri = URI.parse("http://foo.com/this/is/everything?query=params")
12+
# p (uri.methods - Object.methods).sort
13+
p uri.scheme # => "http"
14+
p uri.host # => "foo.com"
15+
p uri.port # => 80
16+
p uri.request_uri # => "/this/is/everything?query=params"
17+
p uri.path # => "/this/is/everything"
18+
p uri.query # => "query=params"
19+
20+
# There are setters as well
21+
uri.port = 8080
22+
uri.host = "google.com"
23+
uri.scheme = "ftp"
24+
p uri.to_s
25+
# => "ftp://google.com:8080/this/is/everything?query=param"

without_uri.rb

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# You don't have to use URI.parse
2+
require "net/http"
3+
4+
http = Net::HTTP.new("google.com", 80)
5+
response = http.request(Net::HTTP::Get.new("/foo/bar"))

0 commit comments

Comments
 (0)