比web导航器打开慢

时间:2017-02-27 23:00:25

标签: ruby open-uri

我目前正在努力废弃以下网站: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(windows 10中的ubuntu)上的代码(以确保我的IP不是问题)。 /> 我还在每次打开之间进行了一次睡眠(0.5秒),以避免因做太多请求而被阻止。

我对curb gem

也有同样的问题
require 'curb'
html = Curl.get(link)

由于导航仪(尝试过firefox和chrome)完美运行,我应该尝试模仿它们(例如通过仿真)吗?或者是否有更简单的解决方案(宝石/其他方式使用open / ...)?

1 个答案:

答案 0 :(得分:1)

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

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

  1. 您的浏览器正在本地缓存该页面(您最近的评论意味着这并非如此,尽管新安装的Chrome可能会使用开放式的uri不了解的共享缓存
  2. 可以想象有一个基于用户代理进行缓存的上游缓存,虽然我不知道这样的事情。
  3. 您访问的网站支持open-uri不支持的协议,例如HTTP / 2或SPDY
  4. 该网站基于用户代理提供不同的内容/协议。
  5. 您的流量受限(可能是因为您的用户代理或您的位置 - 您没有提及ruby和浏览器是否在同一台计算机上运行)
  6. 首批测试之一(在您明确了如何确定"速度"与浏览器之后)将尝试使用与浏览器相同的用户代理,并且可能还有浏览器使用您在ruby中使用的相同用户代理。