使用 Nokogiri 打开网站时出现问题 - 请求超时 - 应归咎于 Etags?

Problem opening site with Nokogiri - Request timeout - Etags to blame?

我正在尝试使用 nokogiri

打开 MrPorter.com
 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'

这以前有效,但他们后来添加了 etag,我不确定它是否是罪魁祸首。

有什么办法解决这个问题吗?是否仍然可以使用 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

这似乎将 etag 的过期时间设置为大约 5 分钟,这让我认为它可能是 etag 出了问题。

有没有人知道如何让它们中的任何一个易于访问?

如果您发送 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)

您将得到一个经过解析的页面