post forme de paramètres de différence entre Firefox et Ruby Mécaniser
-
24-09-2019 - |
Question
Je suis en train de voir si mécaniser l'envoie message correct requête.
Je tiens à vous connecter à un forum (voir source html, mécaniser journal dans mon autre question), mais je ne reçois que la page de connexion à nouveau.Lorsqu'on la regarde, je peux voir que firefox envoie post avec des paramètres comme
auth_username=myusername&auth_password=mypassword&auth_login=Login
mais mon script envoie
auth_username=radek&auth_password=mypassword
est-ce correct ou l' &auth_login=Login
le cadre doit être présent?
Quand j'ai essayé de l'ajouter à l'aide login_form['auth_login'] = 'Login'
J'ai eu une erreur gems/mechanize-0.9.3/lib/www/mechanize/page.rb:13 in
meta':méthode non search' for nil:NilClass (NoMethodError)
Il me semble que auth_login est une forme de bouton de pas un champ (je ne sais pas si c'est important)
[#<WWW::Mechanize::Form
{name nil}
{method "POST"}
{action
"http://www.somedomain.com/login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1"}
{fields
#<WWW::Mechanize::Form::Field:0x36946c0 @name="auth_username", @value="">
#<WWW::Mechanize::Form::Field:0x369451c @name="auth_password", @value="">}
{radiobuttons}
{checkboxes}
{file_uploads}
{buttons
#<WWW::Mechanize::Form::Button:0x36943b4
@name="auth_login",
@value="Login">}>
]
Mon script est comme suit
require 'rubygems'
require 'mechanize'
require 'logger'
agent = WWW::Mechanize.new {|a| a.log = Logger.new("loginYOTA.log") }
agent.follow_meta_refresh = true #Mechanize does not follow meta refreshes by default, we need to set that option.
page = agent.get("http://www.somedomain.com/login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1")
login_form = page.form_with(:method => 'POST') #works
puts login_form.buttons.inspect
puts page.forms.inspect
STDIN.gets
login_form.fields.each { |f| puts "#{f.name} : #{f.value}" }
#STDIN.gets
login_form['auth_username'] = 'myusername'
login_form['auth_password'] = 'mypassword'
login_form['auth_login'] = 'Login'
STDIN.gets
page = agent.submit login_form
#Display message if logged in
puts page.parser.xpath("/html/body/div/div/div/table/tr/td[2]/div/strong").xpath('text()').to_s.strip
puts
puts page.parser.xpath("/html/body/div/div/div/table/tr/td[2]/div").xpath('text()').to_s.strip
output = File.open("login.html", "w") {|f| f.write(page.parser.to_html) }
Vous pouvez trouver plus de code html, connectez-vous à mon autre question relative à la connectez-vous avec votre navigateur et ruby/mécaniser prend-il plus?
La solution
l'absence d'un paramètre comparer à firefox en POST causé mécaniser pas à se connecter.L'ajout de nouveaux paramètre de résoudre ce problème.Il me semble donc que le serveur web a besoin &auth_login=Login
paramètre d'être en POSTE.
Vous pouvez lire comment faire pour ajouter un nouveau champ pour mécaniser la forme dans une autre question.