热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

检查NokogiriHTML文档是否可用-CheckifNokogiriHTMLdocumentisusable

IwanttocheckiftheURLthattheuserinputsisinfactavalidpage.我想检查用户输入的URL是否为有效页面。Itri

I want to check if the URL that the user inputs is in fact a valid page.

我想检查用户输入的URL是否为有效页面。

I tried:

我试着:

if Nokogiri::HTML(open("http://example.com"))
  #DO REQUIRED TASK
end

But that immediately throws an error upon attempting to open the page. I want to return the result of whether it is a document of any kind.

但是当试图打开页面时,会立即抛出一个错误。我想返回它是否是任何类型的文档的结果。

I either get the error:

我要么得到错误:

no such file or directory

or:

或者:

getaddrinfo: Name or service not known

depending on how I try to make the check.

这要看我如何结账。

3 个解决方案

#1


4  

I'd start with something like:

我首先要说的是:

require 'nokogiri'
require 'open-uri'

begin
  doc = Nokogiri.HTML(open(url))
rescue Exception => e
  puts "Couldn't read \"#{ url }\": #{ e }"
  exit
end

puts (doc.errors.empty?) ? "No problems found" : doc.errors

Nokogiri sets the document's errors array to the values of any errors that occurred during the parsing process.

Nokogiri将文档的错误数组设置为解析过程中发生的任何错误的值。

This only addresses one part of the issue though. Malicious people like to break things, and this would be very easy to break. In general, be very careful about anything a user gives you, especially if your site is exposed to the wild internet.

这只解决了问题的一部分。恶意的人喜欢破坏东西,这很容易破坏。一般来说,对于用户提供给你的任何东西都要非常小心,特别是当你的站点暴露在狂野的互联网中时。

Prior to telling OpenURI to load the file to give to Nokogiri, you should sniff that URL and do some sanity checks using a HTTP HEAD request to find out the size and MIME-TYPE of the content being retrieved. Once you know those, you can try loading the file.

在告诉OpenURI加载文件以提供给Nokogiri之前,您应该先嗅探该URL并使用HTTP HEAD请求进行一些完整性检查,以找出要检索的内容的大小和mime类型。一旦知道了这些,就可以尝试加载文件。

#2


3  

Firstly, it's bad style to 'rescue Exception => e' in Ruby. [Refer: http://daniel.fone.net.nz/blog/2013/05/28/why-you-should-never-rescue-exception-in-ruby/ ]

首先,在Ruby中“rescue Exception => e”是不好的风格。(参考:http://daniel.fone.net.nz/blog/2013/05/28/why-you-should-never-rescue-exception-in-ruby/)

Secondly, for this case, "rescue OpenURI::HTTPError => e" would be more suitable.

其次,对于这种情况,“save OpenURI: HTTPError => e”更合适。

#3


1  

I'm not familiar with handling exceptions but something like :

我对处理异常不太熟悉,但是类似:

begin
  page = Nokogiri::HTML(open("http://example.com"))
ensure
  puts "not a document of any kind"
end
do_something_whith(page) if page

...should do the trick.

…应该足够了。

or (after reading your comment) :

或(在阅读你的评论后):

begin
  page = open("http://example.com")
ensure
  puts "not a document of any kind"
end
Nokogiri::HTML(page) if page

推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
yjlz2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有