Ruby 法拉第中间件知道什么时候有东西被重定向了

Ruby 法拉第中间件知道什么时候有东西被重定向了,ruby,faraday,Ruby,Faraday,我使用以下代码发出请求并遵循重定向: require 'faraday' require 'faraday_middleware' conn = Faraday.new() do |f| f.use FaradayMiddleware::FollowRedirects, limit: 5 f.adapter Faraday.default_adapter end resp = conn.get('http://www.example.com/redirect') resp.status

我使用以下代码发出请求并遵循重定向:

require 'faraday'
require 'faraday_middleware'
conn = Faraday.new() do |f|
  f.use FaradayMiddleware::FollowRedirects, limit: 5
  f.adapter Faraday.default_adapter
end
resp = conn.get('http://www.example.com/redirect')
resp.status
这段代码输出200,因为它遵循了重定向,这很好。但是,有没有办法知道是否存在重定向?类似于
resp.redirected
的内容,如果遵循重定向,则设置为
true
,如果没有遵循重定向,则设置为false

我没有在代码中看到任何明显的东西


如果我想知道这一点,我是否需要编写自己的自定义中间件?有人知道中间件可能已经做到这一点了吗?

事实上,我想我刚刚根据这里的帖子找到了答案:

我需要将传入的原始url与生成的url进行比较。从上面扩展我的示例:

original_url = 'http://www.example.com/redirect'
resp = conn.get(original_url)
was_redirected = (original_url == resp.to_hash[:url].to_s)

我找到了解决办法。您可以将回调传递给FaradayMiddleware::FollowRedirects。回调应该位于FollowRedirects接受第二个参数的哈希中。因为我们必须为中间件使用
use
函数,所以您可以将散列作为第二个参数传递给该函数

  redirects_opts = {}

  # Callback function for FaradayMiddleware::FollowRedirects
  # will only be called if redirected to another url
  redirects_opts[:callback] = proc do |old_response, new_response|

    # you can pull the new redirected URL with this line of code.
    # since you have access to the new url you can make a variable or 
    # instance vairable to keep track of the current URL

    puts 'new url', new_response.url
  end

  @base_client = Faraday.new(url: url, ssl: { verify: true, verify_mode: 0 }) do |c|
    c.request :multipart
    c.request :url_encoded
    c.response :json, content_type: /\bjson$/
    c.use FaradayMiddleware::FollowRedirects, redirects_opts //<- pass hash here
    c.adapter Faraday.default_adapter
  end
重定向_opts={}
#FaradayMiddleware::FollowRedirects的回调函数
#仅当重定向到其他url时才会调用
重定向_opts[:回调]=proc do |旧的_响应,新的_响应|
#您可以使用这行代码提取新的重定向URL。
#因为您可以访问新的url,所以可以创建一个变量或
#实例可用于跟踪当前URL
放置“新建url”,新建_response.url
结束
@base_client=Faraday.new(url:url,ssl:{verify:true,verify_mode:0})do|c|
c、 请求:多部分
c、 请求:url\u编码
c、 响应:json,内容类型:/\bjson$/

c、 使用FaradayMiddleware::FollowRedirects,redirects\u opts//查看Typhous,搜索followlocation。我不知道它是否能满足您的要求,但它可能会满足您的要求。:-)您可能需要运行调试器并检查响应对象是否有任何提示。谢谢!我认为我的代码正确地遵循了重定向。我感兴趣的是知道何时遵循重定向。我想我需要将结果url与原始url进行比较,看看它们是否相同。我只是不知道法拉第响应中是否有最终的url。我知道,我只是想知道它是否有帮助器方法来告诉您它是否被重定向了。:-)你确实激发了我对下面答案的思考,所以谢谢你。对我来说,这个值总是零