rails 中调用七牛的fetch api

七牛有从Url获取资源的fetch api, 给出的请求语法如下:

POST /fetch/<EncodedURL>/to/<EncodedEntryURI> HTTP/1.1
Host:           iovip.qbox.me
Content-Type:   application/x-www-form-urlencoded
Authorization:  QBox <AccessToken>

请求示例:

curl -i \
     -o - \
     -H 'Content-Type: application/x-www-form-urlencoded' \
     -H 'Authorization: QBox u8WqmQu1jH21kxpIQmo2LqntzugM1VoHE9_pozCU:2LJIG...' \
     -X POST \
     'http://iovip.qbox.me/fetch/aHR0cDovL3Fpbml1LmNvbS9pbmRleC5odG1s/to/bmV3ZG9jczpmaW5kLm1hbi50eHQ='

我现在想在rails应用中使用该api, 请问是写在controller中好,还是在view中写form好一些?
我现在在controller的action中代码:

remote_url = "http://n4ke-kne.mp4"  #比如是一个视频文件地址
enc_remote_url = Qiniu::Utils.urlsafe_base64_encode(remote_url)  
encode_entry_uri = Qiniu::Utils.encode_entry_uri('thebeast',"#{Time.now}.mp4")
path = "/fetch/#{enc_dl_url}/to/#{encode_entry_uri}HTTP/1.1"
signing_str = path+"\n"
encoded_sign = HMAC::SHA1.digest(signing_str,Qiniu::Config.settings[:secret_key])
post path, nil, {"Content-Type": "application/x-www-form-urlencoded","Host"=>"iovip.qbox.me","Athorization"=>"QBox #{Qiniu::Config.settings[:access_key]}:#{encoded_sign}"}

报错为: undefined method 'post'

请大家帮我看一下, 这个问题怎么解决好一些. 如果写成form, 怎么实现?先谢谢各位了

阅读 5k
1 个回答
remote_url = "http://n4ke-kne.mp4"
enc_dl_url = Qiniu::Utils.urlsafe_base64_encode(remote_url)
encode_entry_uri = Qiniu::Utils.encode_entry_uri('thebeast',"#{Time.now}.mp4")
path = "/fetch/#{enc_dl_url}/to/#{encode_entry_uri}"
host = "http://iovip.qbox.me"
uri = URI.parse "#{host}#{path}"
http = Net::HTTP.new(uri.host, uri.port)
signing_str = path+"\n"
encoded_sign = HMAC::SHA1.digest(signing_str,Qiniu::Config.settings[:secret_key])
request = Net::HTTP::Post.new(uri.path)
request.add_field('Content-Type', 'application/x-www-form-urlencoded')
request.add_field('Host','iovip.qbox.me')
request.add_field("Athorization","QBox #{Qiniu::Config.settings[:access_key]}:#{encoded_sign}")
response = http.request(request)

感觉这样可行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进