Polaczenie ze strona i parsowanie

Witam

uzywam rails 3.1.1 i chce sparsowac swoja strone do ktorej mam haslo i login. Gdy probuje uzyc open-uri strona wymaga podania loginu i hasla. Jak moge otworzyc taka strone podajac haslo i login w celu jej parsowania za pomoca nokogiri?

gdy uzywam Mechanize:

agent = Mechanize.new
page = agent.get(“http://www.hasoffers.pl/login”)
form = page.forms.first
form.email = “login”
form.password = “haslo”
page = agent.submit form

Wyrzuca mi blad:

Net::HTTP::Persistent::Error: too many connection resets (due to end of file reached - EOFError) after 2 requests on 80771870

może to? https://github.com/tenderlove/mechanize/blob/master/FAQ.rdoc

Hej,

mam bliźniaczy problem

Muszę się zalogować na stronę http://c-rpg.net

Próbuje dokładnie tak:

require ‘rubygems’
require ‘nokogiri’
require ‘mechanize’
require ‘time’

agent = Mechanize.new

a = agent.get ‘http://c-rpg.net
login_form = a.form_with(:action => ‘index.php?page=login’)

login = ‘Mój_Login’
haslo = ‘Moje_Hasło’

login_form.username = login
login_form.password = haslo
a = agent.submit login_form
sleep 1
puts a.title

Niestety, mimo iż jestem na 100% pewien, że podaje poprawne dane, to mi się nie loguje.
Męczę się z tym 3 dzień i nie idzie, miałby ktoś sugestie co może być źle?
używam ruby-1.9.1, mechanize-2.0.1

Pozdrawiam
Piotr

Proponuję porównać wysyłane nagłówki za pomocą ręcznego logowania i przez mechanize. Możesz też pobawić się Capybarą - w najgorszym razie użyj Selenium.

Hej, mam taki problem,

najpierw polaczylem sie ze strona za pomoca mechanize uzywajac loginu i hasla:

[code] def self.login
agent = Mechanize.new
page = agent.get(“http://strona.com”)
form = page.forms.first
form.login = “lukasz”
form.password = “haslo”
page = agent.submit form
end

def self.connected?
self.login ? true : false
end[/code]
pozniej po udanym polaczeniu probuje sparsowac JSON ze strony ale zwracany jest blad:

401 Unauthorized Net::HTTPUnauthorized

def parse Connector.login Connector.connected? uri = URI('http://strona.com/errors.json') res = Net::HTTP.get_response(uri) # Status puts res.code # => '200' puts res.message # => 'OK' puts res.class.name # => 'HTTPOK' end
Nie rozumiem dlaczego strona z JSON zwraca mi taki blad skoro po zalogowaniu mam do niej normalny dostep z poziomu przegladarki, ale gdy ja requestuje np uzywajac curl’a albo biblioteki Net::HTTP zwraca mi blad. Z czym to ma zwiazek?

Wydaje mi się, że po zalogowaniu powinieneś nadal używać obiektu agent.
Czyli po submicie robisz następny Mechanize#get i przechodzisz na właściwą stronę.
W przeciwnym razie (czyli zaczynając zupełnie nowy request przez Net::HTTP.get_response(uri)) tracisz cookiesy wywalczone przy logowaniu.

[quote=wlodi]Hej, mam taki problem,

najpierw polaczylem sie ze strona za pomoca mechanize uzywajac loginu i hasla:

[code] def self.login
agent = Mechanize.new
page = agent.get(“http://strona.com”)
form = page.forms.first
form.login = “lukasz”
form.password = “haslo”
page = agent.submit form
end

def self.connected?
self.login ? true : false
end[/code]
pozniej po udanym polaczeniu probuje sparsowac JSON ze strony ale zwracany jest blad:

401 Unauthorized Net::HTTPUnauthorized

def parse Connector.login Connector.connected? uri = URI('http://strona.com/errors.json') res = Net::HTTP.get_response(uri) # Status puts res.code # => '200' puts res.message # => 'OK' puts res.class.name # => 'HTTPOK' end
Nie rozumiem dlaczego strona z JSON zwraca mi taki blad skoro po zalogowaniu mam do niej normalny dostep z poziomu przegladarki, ale gdy ja requestuje np uzywajac curl’a albo biblioteki Net::HTTP zwraca mi blad. Z czym to ma zwiazek?[/quote]
Prawdopodobnie pomiędzy loginem (wykorzystującym mechanize) a dalszą częścią kodu (Net::HTTP) nie jest zachowywana sesja. Może użyj Capybary, która zachowuje sesje, aby wejść na stronę ,wypełnić formularz, pobrać potrzebny json. Albo Mechanize, też powinien mieć takią opcję wbudowaną (chociaż się nei znam bo dawno nie używałem(.

Hej witam, dzieki za odpowedz, problem byl w zachowaniu sesji. Pnowne uzycie metody get z Mechanize rozwiazalo ten problem, dzieki.