Comment faire l'authentification de base sur HTTP dans Ruby?
Après avoir cherché beaucoup, j'ai trouvé des solutions qui semblent travailler, mais pas pour moi...
Par exemple, j'ai ce script:
require 'net/http'
require "net/https"
@http=Net::HTTP.new('www.xxxxxxx.net', 443)
@http.use_ssl = true
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
@http.start() {|http|
req = Net::HTTP::Get.new('/gb/PastSetupsXLS.asp?SR=31,6')
req.basic_auth 'my_user', 'my_password'
response = http.request(req)
print response.body
}
Quand je le lance, il me donne une page qui demande pour l'authentification, mais si j'écris l'URL suivante dans le navigateur, j'entre dans le site sans problèmes:
https://my_user:[email protected]/gb/PastSetupsXLS.asp?SR=31,6
J'ai aussi essayé avec open-uri:
module OpenSSL
module SSL
remove_const :VERIFY_PEER
end
end
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
def download(full_url, to_here)
writeOut = open(to_here, "wb")
writeOut.write(open(full_url, :http_basic_authentication=>["my_user", "my_password"]).read)
writeOut.close
end
download('https://www.xxxxxxx.net/gb/PastSetupsXLS.asp?SR=31,6', "target_file.html")
Mais le résultat est le même, le site est en demande d'authentification de l'utilisateur.
Des conseils de ce que je fais mal?. Dois-je encoder le mot de passe en Base 64?
source d'informationauteur Eduardo Yáñez Parareda
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un bout de code basé sur des exemples donnés dans le Net::HTTP docs et testé sur mon local WAMP serveur, il fonctionne très bien. Voici ce que j'ai:
Et mon
.htaccess
fichier ressemble à ceci:Mon
.htpasswd
est juste un liner généré avechtpasswd -c .htpasswd matt
pour mot de passe "secret". Lorsque j'exécute mon code j'obtiens "200 OK" et le contenu de index.html. Si je supprime lerequest.basic_auth
ligne, j'obtiens erreur 401.Mise à JOUR:
Comme indiqué par @stereoscott dans les commentaires, le
:verify_mode
valeur que j'ai utilisé dans l'exemple (OpenSSL::SSL::VERIFY_NONE
) n'est pas sans danger pour la production.Toutes les options disponibles répertoriés dans le OpenSSL::SSL::SSLContext docs sont: VERIFY_NONE, VERIFY_PEER, VERIFY_CLIENT_ONCE, VERIFY_FAIL_IF_NO_PEER_CERT, qui (selon l' OpenSSL docs) seuls les deux premiers, ceux qui sont utilisés dans le mode client.
Donc
VERIFY_PEER
doit être utilisé sur la production, qui la valeur par défaut est btw, de sorte que vous pouvez l'ignorer totalement.