gpt4 book ai didi

ruby-on-rails - 无效 URI - 如何防止 URI::InvalidURIError 错误?

转载 作者:行者123 更新时间:2023-12-03 00:39:31 25 4
gpt4 key购买 nike

我从delayed_job那里得到了以下信息:

[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 中我这样做:

  @comment.attachments.each do |a|
attachments[a.attachment_file_name] = open(a.authenticated_url()) {|f| f.read }
end

然后在我的附件模型中:

  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 中出错并杀死了elasted_job?

谢谢!

最佳答案

Ruby(至少)有两个用于处理 URI 的模块。

URI是标准库的一部分。

Addressable::URI ,是一个单独的 gem,并且更全面,并且声称符合规范。

使用其中任意一个解析 URL,使用 gem 的方法修改任何参数,然后在传递之前使用 to_s 将其转换,然后就可以开始了。

I tried ' open( URI.parse(URI.encode( a.authenticated_url() )) ' but that errord with OpenURI::HTTPError: 403 Forbidden

如果您通过浏览器导航到该页面并且成功,然后通过代码直接访问该页面失败,则可能缺少 cookie 或 session 状态。您可能需要使用类似 Mechanize 的内容,这将保持该状态,同时允许您浏览网站。

<小时/>

编辑:

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"

关于ruby-on-rails - 无效 URI - 如何防止 URI::InvalidURIError 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com