Проблема открытия сайта с Nokogiri - Запрос тайм-аута - Etags виноват? - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь открыть MrPorter.com с помощью nokogiri

 Nokogiri::HTML(open("https://www.mrporter.com"))

И получаю следующую ошибку:

Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
from /Users/8bithero/.rbenv/versions/2.6.5/lib/ruby/2.6.0/net/protocol.rb:217:in `rbuf_fill'

Это работало ранее, но с тех пор они добавили etags что я не уверен, может ли это быть виновником.

Есть ли способ обойти это? Можно ли открыть эту страницу (или аналогичную) с помощью Nokogiri? Может быть, мне не хватает некоторых обязательных параметров?


Есть вызов API, который вы можете сделать с помощью почтальона (и добавив content-type: application/json)

https://www.mrporter.com/api/inseason/search/resources/store/mrp_gb/productview/666467151985458?locale=en_GB

Но если вы нажмете это напрямую это не сработает, если вы впервые не посетите страницу продукта: https://www.mrporter.com/en-gb/mens/product/red-wing-shoes/shoes/lace-up-boots/8138-moc-leather-boots/666467151985458

Похоже, что etags устанавливается со временем истечения около 5 минут, это было то, что заставило меня подумать, что это может быть виноваты etags.

У кого-нибудь есть идеи, как получить доступ к любому из них?

1 Ответ

1 голос
/ 01 марта 2020

Если вы отправляете запрос net / http, сайт защищен для проверки пользовательским агентом. Вы можете проанализировать страницу следующим образом:

require 'nokogiri'

page = `curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" https://www.mrporter.com/en-gb/`
parse_page = Nokogiri::HTML(page)

Вы получите проанализированную страницу

...