-1

http基本認証を使用して保護されているサイトがあります。

http基本認証に合格し、Webページのコンテンツを読み取ることができるrubyスニペットをコーディングしたいと思います。

私はJavaで、HTTPヘッダーに設定されたキーやその他の詳細を送信し、Webページのコンテンツを読み取る方法を使用しました。しかし、ルビーで同じものを見つけることができませんでした。

編集:

私が使用するコードはここにあります:

   def express
    http_basic_authenticate_with :name => "dhh", :password => "secret"
   end

これは私にエラーを与えます:

undefined method `http_basic_authenticate_with' for #<ServiceController:0x7f9bd73e5448>

前もって感謝します。

4

3 に答える 3

2

Deviseは組み込まれHTTP Basic Authenticationていますが、アプリを機能させるには、アプリに2つの小さなものが必要です。

:database_authenticatableconfig.http_authenticatable = truedevise初期化子のユーザー/アカウントモデルの戦略

DeviseはWarden、認証用のラックフレームワークであるに依存しています。有効なラックアプリであるfailure_appと呼ばれるものによって、それ自体で、Warden認証されていないすべてのリクエストにカスタム応答を提供しようとします。

http認証を実行する簡単なコードは次のとおりです。

def http_authenticate
  authenticate_or_request_with_http_digest do |user_name, password|
    user_name == "foo" && password == "bar"
  end
  warden.custom_failure! if performed?
end

それに良い投稿もあります。こちらを確認してください。

もう1つの解決策(代替)は、Mechanizeライブラリを使用することです

    require 'rubygems'
    require 'mechanize'
    require 'logger'

    agent = WWW::Mechanize.new { |a| a.log = Logger.new("mech.log") }
    agent.user_agent_alias = 'Windows Mozilla'
    agent.auth('username', 'password')
    agent.get('http://example.com') do |page|
      puts page.title
    end
于 2013-01-17T09:48:40.627 に答える
1

私はそれがあなたが探しているものだと思います:

 class SecretController < ApplicationController
   http_basic_authenticate_with :name => "frodo", :password => "thering"
   def index
     ...
   end
 end

特定の例外を渡すこともできますaction

 http_basic_authenticate_with :name => "dhh", :password => "secret", :except => :index

それについてのRailsCastsもあります。

編集-レールのバージョンが3.1より前の場合は、独自のメソッドを作成できます。

class ApplicationController < ActionController::Base
USER, PASSWORD = 'dhh', 'secret'

before_filter :authentication_check, :except => :index

...

 private
  def authentication_check
   authenticate_or_request_with_http_basic do |user, password|
    user == USER && password == PASSWORD
   end
  end
end 
于 2013-01-17T09:34:30.080 に答える
1

httpartyなどのgemを使用してください:

opt = {basic_auth: {username: "user123", password: "pass"}}
response = HTTParty.get("your_site", opt)
于 2013-01-17T09:38:10.627 に答える