如何检查Amazon S3上的URL是否有效,并且未使用ruby过期

时间:2013-06-26 19:33:57

标签: ruby http amazon-s3

我需要接受一个网址: https://aidin.s3.amazonaws.com/appname/bucket/folder/faxattach/bXs9FerLJR1tnhs3z?AWSAccessKeyId=ACCEDD_KEY&Expires=1372360744&Signature=SIGNATURE

并检查该网址是否有效且未过期。

我尝试了一些不同的东西,但它们往往会出错。例如:

url = URI.parse("https://aidin.s3.amazonaws.com/appname/bucket/folder/faxattach/bXs9FerLJR1tnhs3z?AWSAccessKeyId=ACCEDD_KEY&Expires=1372360744&Signature=SIGNATURE")
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)

这给了我 Net::HTTPBadResponse: wrong status line: "\x15\x03\x01\x00\x02\x02"无论网址是否有效。

2 个答案:

答案 0 :(得分:1)

我自己也遇到了这个问题,这就是为我解决的问题:

url      = URI.parse(url_param)
http     = Net::HTTP.new(url.host, url.port)

http.use_ssl = true if url.scheme == 'https'

response = http.request_head(url.path)

错误的状态行是由于Net库将请求视为HTTP,而S3可以是。 use_ssl布尔赋值取决于该方案是HTTPS。

答案 1 :(得分:0)

你可以使用aws-s3 gem(https://github.com/marcel/aws-s3

S3Object.exists? 'headshot.jpg', 'photos'