J'essaie de me connecter à un site sur l'intranet de l'entreprise qui comporte une boîte de dialogue contextuelle d'authentification de base et une authentification basée sur un formulaire. Voici le code que je utilise (ce qui se traduit par un 401 => Net :: erreur HTTPUnauthorized):Authentification de base et de formulaire avec Mechanize (Ruby)
require 'rubygems'
require 'mechanize'
require 'logger'
agent = WWW::Mechanize.new { |a| a.log = Logger.new("mech.log") }
agent.user_agent_alias = 'Windows Mozilla'
agent.basic_auth('username','password')
agent.get('http://example.com') do |page|
puts page.title
end
Il en résulte un 401 => Net :: erreur HTTPUnauthorized. Ci-dessous est mech.log info:
I, [2011-03-13T17:25:21.900631 #22128] INFO -- : Net::HTTP::Get: /index.asp?LogIn=yes&action=7
D, [2011-03-13T17:25:21.901631 #22128] DEBUG -- : request-header: accept-language => en-us,en;q=0.5
D, [2011-03-13T17:25:21.901631 #22128] DEBUG -- : request-header: accept => */*
D, [2011-03-13T17:25:21.901631 #22128] DEBUG -- : request-header: user-agent => Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6
D, [2011-03-13T17:25:21.902631 #22128] DEBUG -- : request-header: connection => keep-alive
D, [2011-03-13T17:25:21.902631 #22128] DEBUG -- : request-header: accept-encoding => gzip,identity
D, [2011-03-13T17:25:21.902631 #22128] DEBUG -- : request-header: host => example.com
D, [2011-03-13T17:25:21.902631 #22128] DEBUG -- : request-header: accept-charset => ISO-8859-1,utf-8;q=0.7,*;q=0.7
D, [2011-03-13T17:25:21.903631 #22128] DEBUG -- : request-header: keep-alive => 300
D, [2011-03-13T17:25:22.813722 #22128] DEBUG -- : Read 24 bytes
D, [2011-03-13T17:25:22.814722 #22128] DEBUG -- : response-header: content-type => text/html
D, [2011-03-13T17:25:22.815722 #22128] DEBUG -- : response-header: connection => close
D, [2011-03-13T17:25:22.815722 #22128] DEBUG -- : response-header: www-authenticate => Negotiate, NTLM, Basic realm="example.com"
D, [2011-03-13T17:25:22.816722 #22128] DEBUG -- : response-header: date => Sun, 13 Mar 2011 11:55:21 GMT
D, [2011-03-13T17:25:22.817722 #22128] DEBUG -- : response-header: server => Microsoft-IIS/5.0
D, [2011-03-13T17:25:22.817722 #22128] DEBUG -- : response-header: content-length => 24
I, [2011-03-13T17:25:22.819723 #22128] INFO -- : status: 401
À ce stade, j'essaie seulement de passer la première authentification de base. J'ai remarqué une chose qui est que le serveur est IIS et dans le Mechanize documentation il y a une fonction publique appelée gen_auth_headers(), mais dans le code de la gemme que j'utilise cette fonction n'existe pas, plus ce qu'il fait dans le code me dépasse.
TIA, Nabs
Droit, désolé j'ai oublié d'inclure cette ligne. En fait, j'ai utilisé basic_auth qui est un alias pour auth – Nabs
J'ai testé ce qui précède avec Mechanize 1.0.0 et cela fonctionne. Peut-être un bug dans la version que vous utilisez alors. –
Je crois que agent.auth est maintenant obsolète. Au lieu de cela, utilisez agent.add_auth (domaine, nom d'utilisateur, mot de passe) –