Domanda

Sto cercando di capire se mechanize invia corretta postale di query .

Voglio accedere ad un forum (si veda html sorgente, mechanize log nella mia altra questione) ma ho ancora una volta solo la pagina di login. Se si guarda in esso posso vedere che Firefox invia post con parametri come

auth_username=myusername&auth_password=mypassword&auth_login=Login , ma il mio script invia

auth_username=radek&auth_password=mypassword è che ok o la parte &auth_login=Login deve essere presente?

Quando ho provato ad aggiungere utilizzando login_form['auth_login'] = 'Login' ho ottenuto un gems/mechanize-0.9.3/lib/www/mechanize/page.rb:13 inmeta errore ': metodo non definito search' for nil:NilClass (NoMethodError)

Mi sembra che auth_login è un'organizzazione senza pulsante di forma un campo (non so se è importante)

[#<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">}>
]

Il mio script è la seguente

  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) }

Si possono trovare più codice, html, My altra questione correlata log in con il browser e poi rubino / mechanize prende sopra?

È stato utile?

Soluzione

assenza di un parametro confrontarle firefox in POST causato mechanize non connettervi. Aggiunta nuovo parametro risolto questo problema. Quindi mi sembra che il server web richiede parametro &auth_login=Login di essere in POST.

Si può leggere come aggiungere nuovo campo Mechanize modulo in un'altra domanda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top