【问题标题】:How to access the page protected by basic auth using Faraday?如何使用法拉第访问受基本身份验证保护的页面?
【发布时间】:2018-01-11 01:43:46
【问题描述】:

我有一个要访问的 php 页面,该页面受基本身份验证保护。我知道 url 和用户名/密码,它们在下面的代码中列出:

url = 'https://henry.php' # note that it is a php website
username = 'foo'
password = 'bar'

Faraday 提供基本的身份验证功能,their doc 说我应该使用以下代码:

connection = Faraday.new(url: url) do |conn|
  conn.basic_auth(username, password)
end 

我想获取上述 url 的响应正文,以确保基本身份验证确实成功并且我可以访问内容,但我不知道如何访问。我尝试了以下每种方法,但都不起作用:

connection.body
connection.response.body
connection.env.response.body

# or

r = connection.get
r.body
r.response.body
r.env.response.body

# or

r = connection.get '/'
r.body
r.response.body
r.env.response.body

获取尸体的正确方法是什么?

注意:

在浏览器中,我直接访问https://henry.php,浏览器提示我一个询问我的用户名和密码的框,我输入它们,我可以看到内容 - 我可以看到我拥有的详细信息是正确的,它应该可以工作(这是因为浏览器知道如何进行基本身份验证),但我就是不知道如何使用法拉第在代码中进行。

【问题讨论】:

    标签: php ruby basic-authentication faraday


    【解决方案1】:

    回答我自己的问题:

    不仅仅是:

    connection = Faraday.new(url: url) do |conn|
      conn.basic_auth(username, password)
    end
    

    你应该记得使用适配器:

    connection = Faraday.new(url: url) do |conn|
      conn.adapter Faraday.default_adapter # make requests with Net::HTTP
      conn.basic_auth(username, password)
    end
    

    因为 Faraday 是一个接口,它不做建立连接和请求的实际工作,适配器会做,所以你需要它来工作。

    然后,要获得您想要的响应正文,您可以:

    response = connection.get
    response.body
    

    【讨论】:

      【解决方案2】:

      Faraday gem 带有许多插件(中间件),可以使 HTTP 请求更简单、更可定制。在 Ruby 中,基本身份验证可能很困难。一起来看看吧;

      require "faraday"
      
      request_helper = Faraday.new(url: 'example.com') do |builder|
                      builder.use Faraday::Request::BasicAuthentication, client_key, secret_key
                   end
      
      # you make HTTP requests using `request_helper` since basic auth is configured
      
      response = request_helper.get('/myendpoit')
      

      在使用诸如 Stripe API 之类的 API 时,您必须通过证明客户端密钥和密钥来获取令牌。我们可以将客户端和密钥作为 Faraday::Request::BasicAuthentication 中间件的输入,以使用与以前相同的方法建立基本身份验证。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 2021-09-24
        • 2019-03-01
        • 1970-01-01
        相关资源
        最近更新 更多