Я хочу получить данные из этой страницы:
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:
Я не действительно уверен, как получить те данные после того, как они перенаправляют и бросают ту ошибку.
Вам нужен такой инструмент, как 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
, и вы готовы к рок-н-роллу.
Сайт, похоже, выполняет часть логики перенаправления с сеансами. Если вы не отправите обратно файлы cookie сеанса, которые они отправляют при первом запросе, вы попадете в цикл перенаправления. ИМХО это дерьмовая реализация с их стороны.
Однако я попытался передать им файлы cookie, но у меня не получилось заставить их работать, поэтому я не могу быть полностью уверен, что это все, что здесь происходит.