首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效URI -如何防止URI::InvalidURIError错误?

无效URI -如何防止URI::InvalidURIError错误?
EN

Stack Overflow用户
提问于 2011-01-19 00:51:17
回答 1查看 9.8K关注 0票数 6

我从delayed_job得到了以下信息:

代码语言:javascript
复制
[Worker(XXXXXX pid:3720)] Class#XXXXXXX failed with URI::InvalidURIError: bad URI(is not URI?): https://s3.amazonaws.com/cline-local-dev/2/attachments/542/original/mac-os-x[1].jpeg?AWSAccessKeyId=xxxxxxxx&Expires=1295403309&Signature=xxxxxxx%3D - 3 failed attempts

在我的应用程序中,这个URI的来源是。

在我的user_mailer中:

代码语言:javascript
复制
  @comment.attachments.each do |a|
    attachments[a.attachment_file_name] = open(a.authenticated_url()) {|f| f.read }
  end

然后在我的附件模型中:

代码语言:javascript
复制
  def authenticated_url(style = nil, expires_in = 90.minutes)
    AWS::S3::S3Object.url_for(attachment.path(style || attachment.default_style), attachment.bucket_name, :expires_in => expires_in, :use_ssl => attachment.s3_protocol == 'https')
  end

话虽如此,是否有某种类型的URI.encode或解析可以阻止有效的URI (当我在浏览器中检查URL工作时)以在rails 3中错误地运行和杀死delayed_job?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-01-19 04:11:33

Ruby至少有两个处理URI的模块。

URI是标准库的一部分。

可寻址::URI,是一个独立的宝石,更全面,并声称符合规范。

使用任何一个URL来解析一个URL,使用gem的方法修改任何参数,然后在传递它之前使用to_s转换它,您应该会做得很好。

我试过‘open( URI.parse(URI.encode( a.authenticated_url()’,但是这个错误与OpenURI::HTTPError: 403个禁忌

如果您通过浏览器导航到该页面,它成功了,然后通过代码直接访问该页面失败,很可能会有一个cookie或会话状态丢失。您可能需要使用类似于机械化的东西,这将在允许您浏览站点的同时维护该状态。

编辑:

代码语言:javascript
复制
require 'addressable/uri'

url = 'http://www.example.com'

uri = Addressable::URI.parse(url)
uri.query_values = {
  :foo => :bar,
  :q   => '"one two"'
}

uri.to_s # => "http://www.example.com?foo=bar&q=%22one%20two%22"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4730698

复制
相关文章

相似问题

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