在有效URL上自动返回500



我试图获取一个特定的页面机械化:

require 'mechanize'
agent = Mechanize.new
p agent.get("http://formitas.si")

但是我得到了这个:

`fetch': 500 => Net::HTTPInternalServerError for http://formitas.si/ -- unhandled response (Mechanize::ResponseCodeError)

而页面在浏览器中正常打开。为什么?

这是服务器的问题。这很容易判断,因为这是一个500系列的错误。

下面是HTTP请求诊断101:

考虑一下服务器可以感知到的浏览器和Mechanize之间的区别。您已经获得了请求URL本身,以及作为HTTP请求的一部分发送的标头。

URL本身很容易视觉检查,所以如果你已经确认它在Mechanize和浏览器中是相同的,可以立即排除。

剩下头文件。使用工具检查浏览器发送的标题,然后查看您正在使用Mechanize的内容。让它们匹配。

根据经验,我怀疑这是浏览器的签名或可接受的数据类型在浏览器和Mechanize之间不同的情况,并且该站点不知道如何处理其中一个

在过去,我遇到过机械化无法解决DNS本身的问题。

虽然我相当确定Mechanize使用Resolv来获取底层站点,但我也无法让agent.get('http://formitas.si')工作。

相反,我所做的是显式访问Resolv库,并将IP设置为我访问的内容,而不是主机名。

require 'mechanize'
require 'Resolv'
@agent = Mechanize.new
address = Resolv.getaddress "formitas.si"
page = @agent.get('http://' + address.to_s) # wouldn't let me use string interpolation on SO
pp page

结果是:

#<Mechanize::Page
 {url #<URI::HTTP:0x007f7f93ec7c68 URL:http://212.44.99.132/>}
 {meta_refresh}
 {title nil}
 {iframes}
 {frames}
 {links #<Mechanize::Page::Link "" "http://www.parallels.com/plesk/">}
 {forms}>

相关内容

  • 没有找到相关文章

最新更新