I have been using RSpec to test an API and calling web services is a natural part of the work – so, I find myself going back to the Net::HTTP documentation from time to time. Most of the items are quite standard and the very well-written page (almost a cheatsheet) is at: https://docs.ruby-lang.org/en/2.7.0/Net/HTTP.html
This page is created basically on the back of the documentation page just to remind me how to do this. If it helps someone else, that’s a bonus!
There was one piece of code that I found very interesting and I wanted to bookmark it for later use – so, I’m adding it to this Notepad for memory. The code centres around using HTTPS/SSL. During development, especially locally, it’s common to not have HTTPS/SSL set up while the staging and production environments have SSL enabled and HTTPS URLs.
Making calls to HTTPS is enabled for an HTTP connection by Net::HTTP#use_ssl= and commonly, the code looks like:
1
2
3
4
5
6
7
8
9
require 'net/http'
require 'open-uri'
uri = URI('https://secure.example.com/some_path?query=string')
Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
request = Net::HTTP::Get.new uri
response = http.request request # Net::HTTPResponse object
end
The sample is directly from the Ruby 2.7.0 Net::HTTP documentation but I also found another example from the Ruby 2.0.0 Net::HTTP documentation which looks like the simplest and most elegant code to set use_ssl
by inspecting the uri.scheme
– it does this by doing :use_ssl => uri.scheme == 'https'
as shown in the sample below.
1
2
3
4
5
6
7
8
9
10
11
require 'net/http'
require 'open-uri'
uri = URI('https://secure.example.com/some_path?query=string')
Net::HTTP.start(uri.host, uri.port,
:use_ssl => uri.scheme == 'https') do |http|
request = Net::HTTP::Get.new uri
response = http.request request # Net::HTTPResponse object
end
For completeness, it should be noted that doing Net::HTTP.get(uri)
will automatically turn on TLS verification if the URI object has a ‘https’ URI scheme, and that in newer versions of Ruby, you do not need to require ‘net/https’ to use HTTPS.