2011-03-13 9 views
6

Estoy intentando iniciar sesión en un sitio en la intranet de la compañía que tiene un cuadro de diálogo emergente de autenticación básica y autenticación basada en formulario. Este es el código que estoy usando (lo que se traduce en una => Net :: 401 HTTPUnauthorized error):Autenticación básica y de formulario con 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 

Esto da lugar a un error de 401 => Net :: HTTPUnauthorized. A continuación está la información mech.log:

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 

En este punto, solo estoy intentando pasar la primera autenticación básica. Me di cuenta de una cosa que es que el servidor es IIS y en el Mechanize documentation hay una función pública llamada gen_auth_headers(), sin embargo, en el código de la gema que estoy usando esta función no existe, además de lo que está haciendo en el código está más allá de mí

TIA, Nabs

Respuesta

6

Uso método Mechanize#auth

require 'rubygems' 
require 'mechanize' 
require 'logger' 

agent = WWW::Mechanize.new { |a| a.log = Logger.new("mech.log") } 
agent.user_agent_alias = 'Windows Mozilla' 
agent.auth('username', 'password') 
agent.get('http://example.com') do |page| 
    puts page.title 
end 
+0

Derecho, lo siento, olvidé incluir esa línea. En realidad, utilicé basic_auth, que es un alias para auth – Nabs

+0

He probado lo anterior con Mechanize 1.0.0 y funciona. Puede ser un error en cualquier versión que estés usando entonces. –

+3

Creo que agent.auth ahora está en desuso. En su lugar use agent.add_auth (reino, nombre de usuario, contraseña) –

10

auth se eliminará en la liberación de mecanizar 3, por lo que debe ser sustituido por add_auth y proporcionar el URI donde se aplican esas credenciales.

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 
agent.user_agent_alias = 'Windows Mozilla' 
agent.add_auth('http://example.com', 'username', 'password') 
agent.get('http://example.com') do |page| 
    puts page.title 
end 
Cuestiones relacionadas