打开速度比网络导航器慢

open slower than web navigators

我目前正在努力废弃以下网站:http://mangafox.me 并且在打开时遇到问题:

以下代码适用于大多数网站,但我在使用 mangafox 时遇到问题:

require 'open-uri'
html = open('http://mangafow.me', 'User-Agent' => "Ruby/#{RUBY_VERSION}")

我从 https://google.com 和大多数测试站点得到了非常快的响应,但在 http://mangafox.me 上不断收到 OpenTimeout 异常,而且只有有时会获得 html 页面(经过多次尝试)。

然而,导航器工作正常并且没有任何问题(即使在清空缓存时)快速显示网站。

我目前正在使用 Ruby 2.4.0 并在 archlinux ( manjaro ) 和 debian ( ubuntu in windows 10 ) 的两个不同位置尝试了代码(以确保我的 IP 不是问题)。
我还在每次打开之间放置了一个睡眠(0.5 秒),以避免因请求过多而被阻塞。

我也遇到了与 curb gem

相同的问题
require 'curb'
html = Curl.get(link)

既然导航器(尝试过 firefox 和 chromium)工作得很好,我是否应该尝试模仿它们(例如通过模拟一个)?或者是否有更简单的解决方案(gem/其他使用 open 的方式/...)?

首先,您没有明确说明您是如何确定您的浏览器比 ruby open-uri 更快的。

无论如何,有多种可能性:

  1. 您的浏览器正在本地缓存页面(您最近的评论暗示情况并非如此,尽管新安装的 chromium 可能正在使用 open-uri 不知道的共享缓存
  2. 可以想象有一个基于用户代理的缓存的上游缓存,虽然我不知道这样的事情。
  3. 您正在访问的网站支持 open-uri 不支持的协议,例如 HTTP/2 或 SPDY
  4. 该网站根据用户代理提供不同的服务content/protocols。
  5. 您的流量受到限制(可能是因为您的用户代理或您的位置 - 您没有提及 ruby 和浏览器是否 运行 在同一台机器上)

第一个测试(在您清楚如何确定 "speed" 与浏览器相比之后)是尝试使用与浏览器相同的用户代理,并且可能还让浏览器使用您在 ruby.

中使用的相同用户代理