问题标签 [open-uri]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1949 浏览

ruby-on-rails - XML => 带有 Hpricot 和 Rails 的 HTML

我从未使用过 Web 服务和 Rails,显然这是我需要学习的东西。我选择使用 hpricot 因为它看起来很棒。无论如何,_why 已经很好地在hpricot 网站上提供了以下示例:

看起来简单、优雅、轻松。在 Ruby 中效果很好,但我的问题是:如何在 Rails 中分解它?

我尝试将这一切添加到单个控制器中,但想不出在视图中调用它的最佳方法。

因此,如果您从 Web API 解析 XML 文件并使用 Hpricot 将其打印为干净的 HTML,您将如何分解模型、视图和控制器上的活动,以及将什么放在哪里?

0 投票
4 回答
21400 浏览

ruby - 如何使用 open-uri 发出 POST 请求?

是否可以使用 open-uri 从 Ruby 发出 POST 请求?

0 投票
1 回答
4470 浏览

ruby - RSpec 和 Open-URI 如何模拟引发 SocketError/TimeoutError

我希望能够指定当 Open-Uri open() 调用超时或引发异常(例如 SocketError)时,我正在按预期处理事情,但是我遇到了麻烦。

这是我的规范(针对 SocketError):

以及我使用 open-uri 的对象部分:

然而,在这种情况下,规范失败并出现nil.read错误。

这是本周我第二次遇到这个问题,上一次我试图在open()用 a包装时模拟 TimeoutError timeout() {},那次我放弃了,只是通过打开课程而导致实际超时发生。我显然可以通过尝试调用无效的 URL 来引发 SocketError,但我确信有一种正确的方法可以使用 RSpec 来模拟它。

更新:我显然没有在深夜想清楚,错误实际上是当我在 SocketError 之后重新尝试 URL 时,and_raise(SocketError) 部分工作正常。

0 投票
3 回答
9590 浏览

ruby-on-rails - 为什么 Ruby open-uri 的 open 在我的单元测试中返回一个 StringIO,但在我的控制器中返回一个 FileIO?

我继承了一个 Rails 2.2.2 应用程序,该应用程序将用户上传的图像存储在 Amazon S3 上。基于 attachment_fu 的Photo模型提供了rotate一种用于open-uri从 S3 和 MiniMagick 检索图像以执行旋转的方法。

rotate方法包含这一行来检索与 MiniMagick 一起使用的图像:

self.public_filename返回类似的东西

检索图像并旋转它在生产和开发中运行的应用程序中工作得很好。但是,单元测试失败了

原因是在单元测试的上下文中调用模型方法时,open(self.public_filename)正在返回一个StringIO包含图像数据的对象。这个对象的path方法返回nilMiniMagick::Image.from_file炸毁。

当从 调用这个相同的模型方法时PhotosControlleropen(self.public_filename)返回一个FileIO与名为 eg 的文件绑定的实例,/tmp/open-uri7378-0该文件包含图像数据。

想着一定是测试和开发环境的差异,我在开发环境下启动了控制台。但就像在单元测试中一样,open('http://...')返回 a StringIO而不是a FileIO

我已经通过 open-uri 和所有相关的特定于应用程序的代码追踪了我的方式,并且找不到任何差异的原因。

0 投票
1 回答
1182 浏览

ruby - Ruby open-uri 文件锁定

我遇到了一个问题,即下载到本地文件会锁定它,直到我杀死了 ruby​​ 脚本。凭直觉,我改变了调用的形式,现在它没有锁定文件。

有人能告诉我为什么下面的第二种形式不锁定文件,但第一种形式可以吗?

此表单锁定本地文件:

此表单不会锁定文件:

谢谢。

0 投票
4 回答
2703 浏览

ruby - open-uri + hpricot & nokogiri 不能正确解析 html

我正在尝试使用 open-uri + hpricot 解析网页,但这似乎是解析过程中的一个问题,因为宝石没有给我带来我想要的东西。

具体来说,我想在此 url中获取此div(其 id 为'pasajes' ):

http://www.despegar.com.ar

我写了这段代码:

但它什么也没带来!我在 hpricot 和 nokogiri 中尝试了很多东西:

  1. 我尝试给出该​​ div 的绝对路径
  2. 我尝试使用选择器的 CSS 路径
  3. 我尝试使用 hpricot 搜索快捷方式(doc//“div#pasajes”)
  4. 几乎所有可能的相对路径都可以到达“pasajes”div

最后我找到了一个可怕的解决方案。我使用了 watir 库,打开网络浏览器后,我将 html 传递给了 hpricot。以这种方式 hpricot 可以识别 'pasajes' div。但我不想仅仅为了解析目的而打开一个网络浏览器......

我做错了什么?open-uri 工作不好吗?是杏吗?

0 投票
6 回答
22572 浏览

ruby - Ruby 的 open-uri 和 cookie

我想存储来自一个 open-uri 调用的 cookie 并将它们传递给下一个。我似乎找不到合适的文档来执行此操作。如果您能告诉我正确的方法,我将不胜感激。
注意: w3.org 不是实际的 url,但它更短;假装饼干在这里很重要。

2 次否定后更新:虽然这不是一个修辞问题,但我保证这是可能的。 风滚草后更新:见(答案),这是可能的。花了我一段时间,但它有效。

0 投票
2 回答
783 浏览

ruby-on-rails - Rails 控制器中的 Hpricot 超时错误

嘿——我正在编写一个使用 digg API 的基本 Rails 应用程序。我正在尝试使用 hpricot 解析 digg 的 api 提供的 xml 数据,但是在测试页面时,浏览器会挂起,直到我最终捕获 Timeout::Error 异常。

这是控制器的代码:

这是堆栈跟踪:

我只是在学习 Rails,我不知道发生了什么。关于为什么会发生这种情况的任何想法?

更新

我使用本地保存的 xml 文件尝试了相同的确切过程,并且效果很好——问题可能与 open-uri 和远程 xml 有关

0 投票
2 回答
7097 浏览

ruby - 将latin1字符串转换为utf8?

如何将包含 latin1 字符的字符串转换为 utf8?

该字符串是一个文档,由 open-uri 打开并包含这些特殊字符。

此致

0 投票
1 回答
1510 浏览

ruby - 在 Ruby 脚本的工作页面上接收 404 HTTPError

这是我第一次提问,请温柔!

我有一个 Rails 应用程序可以处理一大堆域(到目前为止超过 100 个)的内容。每个域要么指向托管我的应用程序的位置(Heroku,如果您有兴趣),或者指向它托管的原始位置。每次域准备好时,它都需要指向 heroku 服务器,以便我的应用程序可以为其提供内容。

为了检查域是否已成功从其原始位置转换到我的应用程序,我正在编写一个脚本来查找我包含在其中的特殊隐藏标签。如果它找到标签,则该域指向我的应用程序。如果没有,它没有改变,我记录下来。

问题是,到目前为止,至少对于一个域,我的脚本收到了 404 OpenURI::HTTPError 异常。这很奇怪,因为我可以很好地访问该站点,甚至可以通过 curl 获取它。有谁知道为什么工作网站会出现这样的错误?这是重要的片段:

感谢您所有的帮助!