Подобно «getting the status code of a HTTP redirected page», но с NET :: HTTP вместо бордюра творю запрос GET на страницу, которая будет перенаправлять:Как получить код перенаправленного статуса с помощью NET: HTTP?
response = Net::HTTP.get_response(URI.parse("http://www.wikipedia.org/wiki/URL_redirection"))
puts response.code #{
puts response['location']
=> 301
en.wikipedia.org/wiki/URL_redirection
Проблема заключается в том, что я хочу знать код статуса перенаправленная страница. В этом случае это 200, но в моем приложении я хочу проверить, 200 или что-то еще. Решение, которое я видел, - это просто позвонить get_response(response['location'])
, но это не будет работать в моем приложении, потому что способ, которым перенаправляется, делает его так, что перенаправление может выполняться только один раз. Поскольку первый GET использует одно перенаправление, я не могу повторить его снова.
Есть ли способ получить последний код состояния, являющийся результатом GET?
EDIT: Дальнейшее уточнение ситуации:
Приложение, которое я посылаю GET, чтобы есть единый вход механизм аутентификации, где, если я хочу получить доступ к «MYAPP/MYPAGE», I должны сначала отправить сообщение:
postResponse = Net::HTTP.post_form(URI.parse("http://myapp.com/trusted"), {"username" => @username})
Затем сделать запрос GET для:
'http://myapp.com/trusted/#{postResponse.body}/mypage
* postResponse.body
- это билет, который можно выкупить один раз.
что GET проверяет, что билет действителен, а затем перенаправляет:
myapp.com/mypage
Так ли, что билет действителен или нет, я получаю 301.
Я хочу, чтобы проверить код состояния окончательный переход на myapp.com/mypage.
Если я вручную попытаюсь выполнить перенаправление, будь то запрос HEAD или GET, первоначальный переадресация уже расходует билет, поэтому я получаю сообщение об ошибке, в которой истекает срок действия билета, даже если первоначальное перенаправление было 200.
Можете ли вы просто сделать запрос «HTTP HEAD» перенаправленному местоположение, чтобы проверить его статус без «потребления» URL-адреса? Если это так, 'Net :: HTTP' поддерживает это, и я могу дать вам несколько указателей. – struthersneil