代码之家  ›  专栏  ›  技术社区  ›  Henry Yang

如何使用Faraday访问受basic auth保护的页面?

  •  2
  • Henry Yang  · 技术社区  · 8 年前

    我有一个我想访问的php页面,该页面受basic auth保护。我知道url和用户名/密码,它们在下面的代码中列出:

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

    法拉第提供基本的身份验证功能, 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 直接和浏览器提示我一个框,询问我的用户名和密码,然后我输入它们,我可以看到内容-我可以看到我的详细信息是正确的,应该可以工作(这是因为浏览器知道如何进行基本身份验证),但我就是不知道如何使用Faraday在代码中进行验证。

    2 回复  |  直到 8 年前
        1
  •  6
  •   Henry Yang    8 年前

    回答我自己的问题:

    而不仅仅是:

    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
    

    因为法拉第是一个接口,它不做连接和请求的实际工作,适配器做这件事,所以您需要它来工作。

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

    response = connection.get
    response.body
    
        2
  •  0
  •   Adif_Sgaid    4 年前

    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')
    

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

    推荐文章