Используя OpenUri, как я могу получить содержание страницы перенаправления?

Я хочу получить данные из этой страницы:

http://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber?trackingNumber=0656887000494793

Но та страница вперед к:

http://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber?execution=eXs1

Так, когда я использую open, от OpenUri, чтобы попытаться выбрать данные, это бросает a RuntimeError ошибочное высказывание HTTP redirection loop:

Я не действительно уверен, как получить те данные после того, как они перенаправляют и бросают ту ошибку.

7
задан the Tin Man 30 November 2012 в 04:37
поделиться

2 ответа

Вам нужен такой инструмент, как Mechanize .Из его описания:

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

именно то, что вам нужно. Итак,

sudo gem install mechanize

, затем

require 'mechanize'
agent = WWW::Mechanize.new
page = agent.get "http://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber trackingNumber=0656887000494793"

page.content # Get the resulting page as a string
page.body # Get the body content of the resulting page as a string
page.search(".somecss") # Search for specific elements by XPath/CSS using nokogiri

, и вы готовы к рок-н-роллу.

23
ответ дан 6 December 2019 в 07:05
поделиться

Сайт, похоже, выполняет часть логики перенаправления с сеансами. Если вы не отправите обратно файлы cookie сеанса, которые они отправляют при первом запросе, вы попадете в цикл перенаправления. ИМХО это дерьмовая реализация с их стороны.

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

1
ответ дан 6 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: