4

我正在尝试找到一种方法来从用户那里获取 URI/URL 字符串并确定有效的规范形式(或者如果资源无效则失败)。同时,它还应该验证 URL 是否存在。因此,我们正在检查有效的“语法”以及是否存在。

例如,字符串 likegoogle.com应该变成http://www.google.com,字符串 likegoogle.com/insights应该变成http://www.google.com/insights。像这样的字符串http://thiswebsitedoesntexistatall.com应该返回某种错误或异常。

我相信解决方案的一部分可能会调用 HTTPget_response()方法并遵循重定向,直到我获得200 OK状态。

似乎该URI.parse()方法不能原谅放弃http. 我意识到我可以写一个简单的东西来尝试http在前面添加等等,但我希望有一些现有的 gem 或鲜为人知的库函数可以真正原谅 URL 并为我规范化它们。

对于我正在寻找的东西,内置net/http和似乎都太严格了。HTTParty有没有很好的方法来做到这一点?

4

1 回答 1

3

您要求的内容存在一些问题:

  • 当 FTP 和许多其他协议同样有效时,URL 解析器不应假定传入的值是 HTTP 。如果您知道协议很可能是 HTTP,那么您需要添加协议。
  • 如果您尝试连接到某个站点并遵循重定向直到收到 200 响应,那么您只是证明了该 URL 解析为某种有效的页面。那 200 可能是返回的错误页面,因为您想要的页面是死链接或无效,或者该站点暂时关闭。要证明不是这样,意味着您必须对要查找的页面有一些深入的预先了解,例如要搜索的特定内容。
  • 在您遵循重定向后假设 URL 是好的,这不是很安全。许多网站都在 URL 中添加了各种会话数据,因此最初的简单而干净的 URL 可以解析为冗长而复杂的 URL。

我建议您查看Addressable::URI gem。它比 Ruby 的 URI 功能更全面。它不会为你做决定,但至少它会给你一个更完整的 API 并且可以重写/规范化 URL。清理它们和/或确定它们是否良好仍然留给您作为练习。

于 2012-07-25T23:49:12.843 回答