Недавно я использовал Mechanize для такого рода вещей, но я хочу использовать Typhoeus, который я уже использую везде. Я хочу подражать поведению Механизатора, проблема в том, что я хотел бы войти в сайт и выполнить запросы, зарегистрированные в качестве пользователя. Вот обобщенная версия сценария:Вручную войти на сайт с 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('; ') }
)
Печенье отправляется на сервер, но по какой-то причине я не вошедшего в Я тестировал на двух разных участках (которые один из них был мой Rails приложения. введение). Любая идея, что я делаю неправильно или, возможно, лучшее или более широко применимое решение этой проблемы?
Отключение защиты CSRF в моем приложении было первым, что я пробовал. Тем не менее, второй сайт, на котором я тестировал его, является обычным PHP-приложением без этого, поэтому проблема не в этом, я думаю.Поместите скрипт в файл, установите typhoeus с 'gem install typhoeus', измените константы в верхней части соответственно, попробуйте, если он сработает для вас и сообщит мне. Я очень ценю ваш интерес. Благодарю. – Kreeki