如何在Ruby on Rails控制器中执行指定的CURL请求?
在Ruby on Rails控制器中执行Facebook Graph API的POST请求
嘿,我来帮你把这条curl请求转换成Rails控制器里可执行的代码!这条请求是调用Facebook Graph API触发内容抓取,下面给你两种实现方式,一种用Rails内置工具(无需额外依赖),另一种用更简洁的第三方gem。
方法一:使用Rails内置的Net::HTTP
这是最原生的实现方式,不需要安装额外依赖,直接在控制器里编写即可:
require 'net/http' require 'uri' require 'json' class FacebookScrapeController < ApplicationController def trigger_scrape # 替换为你的实际参数 object_identifier = "你的object-url或object-id" access_token = "你的access token" # 构建请求地址 uri = URI.parse("https://graph.facebook.com") # 创建POST请求并设置表单数据 request = Net::HTTP::Post.new(uri) request.set_form_data( "id" => object_identifier, "scrape" => "true", "access_token" => access_token ) # 发送请求并处理响应 response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http| http.request(request) end # 根据响应状态处理结果 if response.is_a?(Net::HTTPSuccess) result = JSON.parse(response.body) render json: result, status: :ok else render json: { error: "请求失败", details: response.body }, status: :bad_request end end end
方法二:使用HTTParty(更简洁)
如果觉得原生代码有点繁琐,可以用HTTParty gem简化开发流程:
- 先在
Gemfile中添加依赖:
gem 'httparty'
然后运行bundle install完成安装。
- 控制器中的实现代码:
require 'httparty' class FacebookScrapeController < ApplicationController def trigger_scrape # 替换为你的实际参数 object_identifier = "你的object-url或object-id" access_token = "你的access token" # 发送POST请求 response = HTTParty.post( "https://graph.facebook.com", body: { id: object_identifier, scrape: "true", access_token: access_token } ) # 处理响应 if response.success? render json: response.parsed_response, status: :ok else render json: { error: "请求失败", details: response.body }, status: :bad_request end end end
小提示
- 敏感信息(比如
access_token)不要硬编码,建议存到Rails环境变量中,用ENV['FACEBOOK_ACCESS_TOKEN']调用 - 可以根据业务需求调整响应逻辑,比如返回视图、跳转页面等
内容的提问来源于stack exchange,提问作者Antônio Abrão
相关产品推荐
相关产品推荐

