Назад | Перейти на главную страницу

только связь заголовка http? - пожалуйста, объясни

Снимок экрана ниже сделан с использованием firebug. Захваченная связь с веб-сервером firefox <-> произошла после нажатия кнопки входа в систему. Но я не вижу перенаправления в своем Firefox. Означает ли это, что firefox и веб-сервер обмениваются данными только на уровне заголовков http?

У меня есть готовый скрипт на Ruby / Mechanize, чтобы очистить некоторые детали с форума. Я тестировал / закодировал его, используя vBulletin.org Форум. Затем мне удалось войти на свой тестовый форум и с радостью перешел к доработке моего скрипта, используя правильный форум. Но я не могу войти в систему. Мой сценарий возвращает только страницу входа, которая, как я предполагаю, является «неудачной попыткой входа в систему».

html страницы входа

<form class="login" method="post"> <fieldset>
<legend>Members Login</legend> 

<div>
<label for="auth_username">Username</label> <input id="auth_username" name="auth_username">
</div>

<div>
<label for="auth_password">Password</label> <input id="auth_password" name="auth_password" type="password">
</div>

</fieldset>
<div class="buttons">
<input name="auth_login" type="submit" value="Login"><p class="note"><a href="/forgotpassword">Forgot your password?</a></p>

</div>

</form>

мой рубиновый скрипт

require 'rubygems'
require 'mechanize'
#agent = WWW::Mechanize.new

agent = WWW::Mechanize.new 

page = agent.get("http://www.vbulletin.org/forum/index.php")

login_form = page.form_with(:action => 'login.php?do=login')


puts 
login_form.fields.each { |f| puts "#{f.name} : #{f.value}" }    
login_form['vb_login_username'] = 'user name'
login_form['vb_login_password'] = ''

page = agent.submit login_form

output = File.open("login.html", "w") {|f| f.write(page.parser.to_html) }

механизировать журнал с попытки входа в систему, которая не работает

 INFO -- : Net::HTTP::Get: /login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1
DEBUG -- : request-header: accept-language => en-us,en;q=0.5
DEBUG -- : request-header: connection => keep-alive
DEBUG -- : request-header: accept => */*
DEBUG -- : request-header: accept-encoding => gzip,identity
DEBUG -- : request-header: user-agent => WWW-Mechanize/0.9.3 (http://rubyforge.org/projects/mechanize/)
DEBUG -- : request-header: accept-charset => ISO-8859-1,utf-8;q=0.7,*;q=0.7
DEBUG -- : request-header: host => www.somedomain.com
DEBUG -- : request-header: keep-alive => 300
DEBUG -- : Read 400 bytes
DEBUG -- : Read 1424 bytes
DEBUG -- : Read 2448 bytes
DEBUG -- : Read 3211 bytes
DEBUG -- : response-header: vary => Accept-Encoding
DEBUG -- : response-header: cache-control => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
DEBUG -- : response-header: connection => close
DEBUG -- : response-header: expires => Thu, 19 Nov 1981 08:52:00 GMT
DEBUG -- : response-header: content-type => text/html; charset=utf-8
DEBUG -- : response-header: date => Fri, 29 Jan 2010 23:43:12 GMT
DEBUG -- : response-header: content-encoding => gzip
DEBUG -- : response-header: server => Apache/2.2.3 (CentOS)
DEBUG -- : response-header: content-length => 3211
DEBUG -- : response-header: set-cookie => PHPSESSID=7cfilg86ju2ldcgso22246hpu4; path=/, WebStats:visitorId=lSMkcwuSWEE%3D; expires=Mon, 27-Jan-2020 23:43:12 GMT; path=/, WebStats:sessionId=%2B2HHK296t%2BQ%3D; expires=Mon, 27-Jan-2020 23:43:12 GMT; path=/
DEBUG -- : response-header: accept-ranges => bytes
DEBUG -- : response-header: pragma => no-cache
DEBUG -- : gunzip body
DEBUG -- : saved cookie: PHPSESSID=7cfilg86ju2ldcgso22246hpu4
DEBUG -- : saved cookie: WebStats:visitorId=lSMkcwuSWEE%3D
DEBUG -- : saved cookie: WebStats:sessionId=%2B2HHK296t%2BQ%3D
 INFO -- : status: 200
DEBUG -- : query: "auth_username=radek&auth_password=mypassword"
 INFO -- : Net::HTTP::Post: /login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1
DEBUG -- : request-header: accept-language => en-us,en;q=0.5
DEBUG -- : request-header: connection => keep-alive
DEBUG -- : request-header: accept => */*
DEBUG -- : request-header: accept-encoding => gzip,identity
DEBUG -- : request-header: content-type => application/x-www-form-urlencoded
DEBUG -- : request-header: user-agent => WWW-Mechanize/0.9.3 (http://rubyforge.org/projects/mechanize/)
DEBUG -- : request-header: cookie => WebStats:sessionId=%2B2HHK296t%2BQ%3D; WebStats:visitorId=lSMkcwuSWEE%3D; PHPSESSID=7cfilg86ju2ldcgso22246hpu4
DEBUG -- : request-header: referer => http://www.somedomain.com/login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1
DEBUG -- : request-header: accept-charset => ISO-8859-1,utf-8;q=0.7,*;q=0.7
DEBUG -- : request-header: content-length => 43
DEBUG -- : request-header: host => www.somedomain.com
DEBUG -- : request-header: keep-alive => 300
DEBUG -- : Read 650 bytes
DEBUG -- : Read 1674 bytes
DEBUG -- : Read 2698 bytes
DEBUG -- : Read 3211 bytes
DEBUG -- : response-header: vary => Accept-Encoding
DEBUG -- : response-header: cache-control => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
DEBUG -- : response-header: connection => close
DEBUG -- : response-header: expires => Thu, 19 Nov 1981 08:52:00 GMT
DEBUG -- : response-header: content-type => text/html; charset=utf-8
DEBUG -- : response-header: date => Fri, 29 Jan 2010 23:43:13 GMT
DEBUG -- : response-header: content-encoding => gzip
DEBUG -- : response-header: server => Apache/2.2.3 (CentOS)
DEBUG -- : response-header: content-length => 3211
DEBUG -- : response-header: accept-ranges => bytes
DEBUG -- : response-header: pragma => no-cache
DEBUG -- : gunzip body
 INFO -- : status: 200

Перенаправление обычно осуществляется с помощью кодов состояния ответа HTTP 301 (перемещено постоянно) или 302 (найдено / перемещено временно). Коды состояния ответа HTTP 301 и 302, используемые для перенаправления, включаются в заголовки HTTP.

То, что вы не «видели перенаправления в Firefox», не означает, что перенаправления не было: это было за кулисами.

Там есть другой способ перенаправления с использованием JavaScript на странице. С помощью JavaScript переадресация может быть сделана очевидной для пользователя, где ему сначала может быть показана страница, а затем перенаправлен (возможно, после задержки) в другое место. Но это не HTTP-перенаправления, которые перемещаются на основании кодов состояния ответа HTTP-заголовка.

Чтобы ответить на ваш вопрос о Ruby: вам следует задать этот вопрос в Stack Overflow. Но, вкратце, да, вы должны иметь возможность устанавливать коды ответа перенаправления 301 и 302 с помощью любой серверной веб-технологии.


ОБНОВИТЬ: To address the further question in your comment below:

Если вы хотите узнать больше о том, как работает HTTP, то рекомендую следующую книгу: HTTP: полное руководство Дэвида Горли и Брайана Тотти. Вы также можете ознакомиться с официальным стандартом HTTP, как определено RFC 2616: протокол передачи гипертекста - HTTP / 1.1.

Относительно того, почему серия запросов выше в вашем вопросе состоит из 11 шагов., вам нужно будет спросить первоначальных авторов рассматриваемого программного обеспечения. Вероятно, это можно было бы реализовать с меньшим количеством шагов, но, вероятно, не только с одним шагом. Учтите, что по крайней мере одно из перенаправлений необходимо серверу для установки файла cookie в браузере пользователя перед отправкой их на защищенный ресурс.

Поскольку вы пытаетесь воспроизвести настраиваемый механизм аутентификации на основе файлов cookie, я также предлагаю вам сосредоточить свои исследования на том, как обычно создаются такие системы.

Если вы пытаетесь создать скрипт для страницы входа, вы должны убедиться, что POST вашей программы на сервер соответствует реальному запросу во всех отношениях, включая тот параметр, который вы в настоящее время не включаете.

Кроме того, вам нужно убедиться, что ваш код принимая и отправка обратно любые файлы cookie, отправленные сервером. Несохранение файлов cookie, отправленных сервером, является распространенной ошибкой при выполнении такого рода упражнений. Кроме того, вам необходимо проинструктировать любую библиотеку, которую вы используете для связи HTTP, чтобы следуйте перенаправлениям. Некоторые из них по умолчанию не следуют перенаправлениям.

И, наконец, для отладки, захвата заголовков и тела запроса и ответа с веб-страницы и из вашей программы, и сравните их. С подозрением относитесь к любым различиям.