53

JMeterを使用したWebサービスの基本認証プロセスを暗示しようとしています。しかし、エラー401:Unauthorizedをスローするたびに。HTTPヘッダーマネージャーを使用して、ヘッダーの承認と値を追加してみました。それでも動作しません。HTTP認証マネージャーも使用してみました。まだ運がない。誰かが助けることができますか。

4

11 に答える 11

61

JMeter からのリクエストをデバッグしたところ、HTTP Authorization Manager モジュールがユーザー名とパスワードを正しくエンコードしていないことがわかりました。ユーザー名の後に改行文字を置きます。

基本認証で保護されたエンドポイントに対して JMeter テストを実行するには、HTTP ヘッダー マネージャーを含め、基本認証ヘッダーを自分で追加します。

クレデンシャルの手動エンコード

  • MacOS または Linux から:

    echo -n "username:password" | base64

  • Windows から:

    ここに移動して、「username:password」文字列をエンコードします

認証ヘッダーの追加

HTTP ヘッダー マネージャーで、名前が「承認」で値が「基本 [上記のエンコードされた資格情報]」のエントリを追加します。

于 2013-03-21T21:24:17.887 に答える
49

JMeter 3.2 の 2017 年 8 月 19 日編集:

基本的に Basic Authorization をバイパスするには、 Authorizationヘッダーに値Basic base64(username:password)を追加する必要があります。問題は、JMeter に base64 関数が組み込まれていないことです。

解決策は次のとおりです。

Step1 BeanShell PreProcessorを追加(PreProcessor --> BeanShell Preprocessor)

ここに画像の説明を入力

Step2次のスクリプトを PreProcessor に追加します

import org.apache.commons.codec.binary.Base64;
byte[] encodedUsernamePassword = Base64.encodeBase64("neo4j:1234".getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));

ここに画像の説明を入力

Step3 HTTPヘッダーマネージャーを追加

ここに画像の説明を入力

Step4正しい値の Authorization ヘッダーを追加します

ヘッダー名Authorization
ヘッダー値Basic ${base64HeaderValue} (base64HeaderValue 変数は BeanShell プリプロセッサによって初期化されます)

ここに画像の説明を入力

したがって、最終的にhttpリクエストを作成すると、Authorizationヘッダーがbase64でエンコードされた文字列とともにサーバーに渡されます

ここに画像の説明を入力

于 2016-01-12T15:11:09.483 に答える
10

以下をせよ:

オプション 2: HTTP 3.1 の使用: (非推奨)

  • jmeter.properties で、コメントを外します:

    httpclient.parameters.file=httpclient.parameters
    
  • httpclient.parameters で、コメントを外します:

    http.authentication.preemptive$Boolean=true
    

JMeter を学びたい場合は、プロジェクトの 3 人の開発者によるこの本が役立ちます。

于 2012-09-24T10:59:22.233 に答える
2

ベース URL のプロトコルを必ず指定してください。つまり、「localhost」ではなく「http://localhost」です。

于 2015-06-11T11:32:09.330 に答える
0

ユーザー定義変数のユーザー名とパスワードを使用する @yurko のわずかなバリエーションを追加します。(3.2 より前の Jmeter の場合)

import org.apache.commons.codec.binary.Base64;
String username = vars.get("USERNAME");
String password = vars.get("PASSWORD");
String combineduserpass = username + ":" + password;
byte[] encodedUsernamePassword = Base64.encodeBase64(combineduserpass.getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));
于 2016-10-04T17:41:07.950 に答える
0

認証リクエスト内の認証にJSON Extractorを簡単に使用して、トークンを変数に保存できます。その後、トークンが必要なときにいつでも使用する必要があります。これを使用するには、その変数を使用するHTTPヘッダーマネージャーが必要です。明確な指示については、スクリーンショットをたどることができます。

JSON Extractor の構成: HTTP ヘッダー マネージャーの構成:JSON エクストラクタ HTTP ヘッダー マネージャー

于 2021-12-03T05:08:30.600 に答える
0

上記の最初の回答を参照して、Apache 3.1 が HTTP Auth Manager でユーザー名:パスワードを正しくエンコードしているように見えるため、言及した誤ったエンコードの問題を修正する必要があります。

于 2017-02-11T16:08:41.920 に答える
-1

2013年の回答からの良い発見を更新します。

HTTP4 オプションは、以下を含む HTTP ヘッダー マネージャーの行を追加した後、現在の Jmeter バージョン 2.13 でも機能します。

name="Authorization", value="Basic [base64-encoded user/password string]"

apache 2.4 から tomcat8 へのリバース プロキシを持つ現在のホスト amazon linux で検証済み。tomcat8 は、401 ステータスをスローする代わりに、ユーザー資格情報を認識しました。

于 2016-01-08T20:25:55.777 に答える