Ответ 1
Я написал фрагмент кода, основанный на примерах, приведенных в документах Net :: HTTP, и протестировал его на локальном сервере WAMP - он отлично работает. Вот что у меня есть:
require 'net/http'
require 'openssl'
uri = URI('https://localhost/')
Net::HTTP.start(uri.host, uri.port,
:use_ssl => uri.scheme == 'https',
:verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
request = Net::HTTP::Get.new uri.request_uri
request.basic_auth 'matt', 'secret'
response = http.request request # Net::HTTPResponse object
puts response
puts response.body
end
И мой .htaccess
файл выглядит так:
AuthName "Authorization required"
AuthUserFile c:/wamp/www/ssl/.htpasswd
AuthType basic
Require valid-user
Мой .htpasswd
- это всего лишь один лайнер, созданный с помощью htpasswd -c.htpasswd matt
для пароля "секрет". Когда я запускаю свой код, я получаю "200 OK" и содержимое index.html. Если я удалю строку request.basic_auth
, я получаю ошибку 401.
ОБНОВИТЬ:
Как указано @stereoscott в комментариях, значение :verify_mode
я использовал в примере (OpenSSL::SSL::VERIFY_NONE
), не безопасно для производства.
Все доступные параметры, перечисленные в документах OpenSSL :: SSL :: SSLContext: VERIFY_NONE, VERIFY_PEER, VERIFY_CLIENT_ONCE, VERIFY_FAIL_IF_NO_PEER_CERT, из которых (согласно документам OpenSSL) в клиентском режиме используются только первые два.
Поэтому VERIFY_PEER
следует использовать при производстве, которое по умолчанию является стандартным, поэтому вы можете полностью его пропустить.