heroku被赋予403禁止使用New :: HTTP.new ...任何想法为什么?

时间:2011-08-21 01:08:48

标签: ruby-on-rails ruby-on-rails-3 heroku

  uri = URI.parse("https://cloudfront.amazonaws.com/2010-08-01/distribution/#{config['cloud_dist_id']}/invalidation")
  req = Net::HTTP::Post.new(uri.path)
  req.initialize_http_header({
    'x-amz-date' => date,
    'Content-Type' => 'text/xml',
    'Authorization' => "AWS %s:%s" % [config['access_key_id'], Base64.encode64(digest.digest)]
  })
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  res = http.request(req)

输出时:

  puts http.inspect
  puts res.inspect

本地工作正常:

#<Net::HTTP cloudfront.amazonaws.com:443 open=false>
#<Net::HTTPCreated 201 Created readbody=true>

但是在heroku上:

#<Net::HTTPForbidden 403 Forbidden readbody=true>
Failed 403

知道为什么这在heroku上失败了。为什么被禁止?感谢

2 个答案:

答案 0 :(得分:1)

Heroku会在签署您的请求时添加您的应用程序不知道的其他输出标头。

尝试明确限制参与签名的标头范围,AWS API中有一些选项用于此

答案 1 :(得分:0)

使用heroku控制台进行测试。

它应该工作,因为我使用相同的东西,但使用HTTParty。

由于