Recientemente utilicé Mechanize para este tipo de cosas, pero quiero usar Typhoeus, que ya estoy usando en otros lugares. Quiero imitar el comportamiento de Mechanize, el problema es que me gustaría iniciar sesión en un sitio y realizar solicitudes como usuario conectado. He aquí la versión generalizada del guión:Iniciar sesión manualmente en el sitio web con Typheous
require 'rubygems'
require 'typhoeus'
GET_URL = 'http://localhost:3000'
POST_URL = "http://localhost:3000/admins/sign_in"
URL = "http://localhost:3000/dashboard"
USERNAME_FIELD = 'admin[email]'
PASSWORD_FIELD = 'admin[password]'
USERNAME = "[email protected]"
PASSWORD = "my_secret_password"
def merge_cookies_into_cookie_jar(response)
if response.headers_hash['set-cookie'].instance_of? Array
response.headers_hash['set-cookie'].each do |cookie|
@cookie_jar << cookie.split('; ')[0]
end
elsif response.headers_hash['set-cookie'].instance_of? String
@cookie_jar << response.headers_hash['set-cookie'].split('; ')[0]
end
end
# initialize cookie jar
@cookie_jar = []
# for server to establish me a session
response = Typhoeus::Request.get(GET_URL, :follow_location => true)
merge_cookies_into_cookie_jar(response)
# like submiting a log in form
response = Typhoeus::Request.post(POST_URL,
:params => { USERNAME_FIELD => USERNAME, PASSWORD_FIELD => PASSWORD },
:headers => { 'Cookie' => @cookie_jar.join('; ') }
)
merge_cookies_into_cookie_jar(response)
# the page I'd like to get in a first place,
# but not working, redirects me back to login form with 401 Unauthorized :-(
response = Typhoeus::Request.get(URL,
:follow_location => true,
:headers => { 'Cookie' => @cookie_jar.join('; ') }
)
La cookie se envía al servidor, pero por alguna razón no estoy inscrito he comprobado en dos sitios diferentes (que uno de ellos era de mi aplicación Rails. administración). ¿Alguna idea de qué estoy haciendo mal o quizás una solución mejor o más aplicable a este problema?
Desactivar la protección CSRF en mi aplicación fue lo primero que he intentado. Sin embargo, el segundo sitio en el que lo probé es una aplicación PHP normal sin eso, así que creo que el problema no está ahí.Coloque el script arriba en el archivo, instale typhoeus con 'gem install typhoeus', cambie las constantes en la parte superior, intente si funciona para usted y hágamelo saber. Realmente aprecio tu interés. Gracias. – Kreeki