首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoMethodError in from Mechanize

NoMethodError in from Mechanize
EN

Stack Overflow用户
提问于 2015-02-10 18:20:41
回答 3查看 460关注 0票数 0

使用mecahnize 2.7.3和ruby 2.3.0dev运行以下代码:

代码语言:javascript
复制
require 'mechanize'
agent = Mechanize.new

agent.keep_alive = false
agent.open_timeout = 2
agent.read_timeout = 2
agent.ignore_bad_chunking = true
agent.gzip_enabled = false

url = 'http:%5C%5Cwww.scouts.org.uk'

agent.head(url)

这就给了我这个NoMethodError:

代码语言:javascript
复制
~/.rvm/gems/ruby-head/gems/mechanize-2.7.3/lib/mechanize/http/agent.rb:648:in resolve': undefined     
methodlength' for nil:NilClass (NoMethodError)

from ~/.rvm/gems/ruby-head/gems/mechanize-2.7.3/lib/mechanize/http/agent.rb:223:in `fetch'
from ~/.rvm/gems/ruby-head/gems/mechanize-2.7.3/lib/mechanize.rb:459:in `head

这是机械化中的一个bug,还是我做错了什么?如果是这样,如何修复呢?

编辑: url显然是错误的,但我从一个文件中读取了很多url,其中一些可能是错误的。

EDIT2:假设我有一个像这样的http://pastie.org/9934756文件,我需要获取所有正确urls的头部,而忽略其他urls

EN

回答 3

Stack Overflow用户

发布于 2015-02-10 18:31:45

你写错了网址,试试这个:url = 'http://scouts.org.uk'

票数 1
EN

Stack Overflow用户

发布于 2015-02-10 19:28:03

您的目标站点正在执行重定向,并使用元刷新。更新您的代码以包含这些方法:

代码语言:javascript
复制
require 'mechanize'

agent = Mechanize.new
agent.keep_alive = false
agent.follow_meta_refresh = true
agent.redirect_ok = true
agent.open_timeout = 10
agent.read_timeout = 10
agent.ignore_bad_chunking = true
agent.gzip_enabled = false

url = 'http:%5C%5Cwww.scouts.org.uk'

begin
  page_head = agent.head(url)
rescue Exception => exception
  puts "Caught exception: #{exception.message}"
end

结果:

代码语言:javascript
复制
=> #Caught exception: undefined method `length' for nil:NilClass
票数 0
EN

Stack Overflow用户

发布于 2015-02-10 20:46:52

您可以添加此方法来检查url是否有效:

代码语言:javascript
复制
require 'uri'
def valid?(url) 
    uri = URI.parse(url) 
    if uri.kind_of?(URI::HTTP) == true
        puts '+'
    else 
        puts '-'
    end
rescue URI::InvalidURIError 
    puts 'false '
end

['http://web.de',
'http://web.de/',
'http:%5c%5cweb.de',
'http:web.de',
'foo://web.de',
'http://we b.de',
'http://|web.de'].each { |i|
    valid?(i)
}

+

+

+

+

错误

错误的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28429204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档