在Rails中,如何向页面发出http请求,例如“http://google.com”并将响应设置为变量?
基本上我正在尝试从Amazon S3获取CSV文件的内容: https://s3.amazonaws.com/datasets.graf.ly/24.csv
My Rails服务器需要将该内容作为对AJAX请求的响应返回。
一些问题提示屏幕抓取,但这听起来有点过分(并且可能很慢)只是简单地做出响应并且几乎只是传递它。
答案 0 :(得分:1)
首先,您需要知道如何访问数据
您引用的问题仅在您通过HTTP(类似CURL)访问某人的网站时才有效。正如你本能地知道的那样,这是非常低效的。可能会阻止您的IP连续访问
访问数据(来自任何信誉良好的服务)的更好方法是使用他们的API。 S3,Twitter,Facebook,Dropbox等也是如此:
#GemFile
gem "aws-sdk-core", "~> 2.0.0.rc2"
#config/application.rb
Aws.config = {
access_key_id: '...',
secret_access_key: '...',
region: 'us-west-2'
}
#config/initializers/s3.rb
S3 = Aws::S3.new
S3 = Aws.s3
然后,您将能够使用API resources来帮助检索对象:
#controller
# yields once per response, even works with non-paged requests
s3.list_objects(bucket:'aws-sdk').each do |resp|
puts resp.contents.map(&:key)
end
如果您考虑xhr
进入服务器,则需要确保您拥有正确的CORS权限
考虑到您想要使用S3,我会查看this documentation以确保您正确设置权限。这不适用于API或HTTP请求(仅限Ajax)
答案 1 :(得分:0)
按照你的要求去做:
或者解码rails中的csv文件并传回json数组:
我的头顶应该是这样的:
def get_csv
url = 'http://s3.amazonaws.com/datasets.graf.ly/%d.csv' % params[:id].to_i
data = open(url).read
# set header here
render :text => data
end