PDA

View Full Version : [HTTP] POST + cookies


^TiGeRShArK^
15-09-2007, 14:18
Allora..
è da ieri sera ke mi sto facendo delle segone mentali per cercare di loggarmi tramite un'applicazione client alla mia web-mail...
In pratica però c'è qualcosa che non mi quadra.. e non so se è legato ai cookie o a qualcos'altro :fagiano:
posto il codice ruby che dovrebbe essere piuttosto comprensibile:

require 'net/http'

file = File.open('index.html', 'w')
res = Net::HTTP.new('tin.alice.it', 80).start do |http| #crea una connessione HTTP col server.
get = Net::HTTP::Get.new('/') #effettua un primo get per ottenere il cookie
response = http.request(get)
cookie = response.response['set-cookie'].split(';')[0] #memorizza il cookie
response.each {|key, val| puts key + ' = ' + val} #stampa tutte le properties della response .. tanto x capirci qualcosa

res1 = Net::HTTP.new('communicator.virgilio.it', 80).start do |http1| #inizia una nuova connessione http verso il server utilizzato per l'autenticazione
post = Net::HTTP::Post.new('/asp/a3login.asp') #inizializza il post specificando la pagina che lo dovrà ricevere
post.set_form_data({'a3aid'=>'comhptin',
'a3afep'=>'http://tin.virgilio.it/Error/mail_error.html',
'USER'=>'*****',
'DOMAIN'=>'tin.it',
'PASS'=>'*****',
'Act_Login'=>'Entra',
'Act_Login.x'=>'37',
'Act_Login.y'=>'5'}) #inizializza i dati del form
post['Cookie'] = cookie #inserisce il cookie nel post
file.puts http.request(post) #effettua il post e scrive su file la response
end
end

In pratica però dopo aver fatto questo piccolo giro mi ritrovo in una pagina di errore in cui dice tra le altre cose:

Siamo spiacenti, la pagina che hai richiesto è inesistente.

Hai digitato un indirizzo errato, oppure quello di una pagina che ha cambiato nome o è stata eliminata o spostata.

ora..
qualcuno ha esperienza di login in siti web tramite il metodo POST in qualsiasi linguaggio che ne capisca qualcosa di cosa è successo?
Perchè io onestamente non ci sto capendo + niente.... :fagiano:

^TiGeRShArK^
15-09-2007, 19:08
trovata la soluzione :D
è bastato usare la libreria 'mechanize' di ruby che tratta in maniera trasparente al povero programmatore le pagine nascondendogli la complessità di cookies e quant'altro.
Per completezza posto il codice casomai dovesse servire a qualke altro povero sventurato :D

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

page = agent.get 'http://tin.alice.it'

authentication_form = page.form 'wmvirgilio'
authentication_form.DOMAIN = 'tin.it'
authentication_form.USER = '*****'
authentication_form.PASS = '*****'
page = agent.submit(authentication_form)

redirect_form = page.form 'RedirectForm'
page = agent.submit(redirect_form)

AAform = page.form 'AAform'
page = agent.submit(AAform)

puts page.body

ora devo solo capire come arrivare alla pagina della mail dato che lì il menu è generato tramite javascript :fagiano:
ma questo è un altro problema :D