1

fiware の hdfs に対してプログラムで REST API を実行するために C# を使用して .net アプリケーションを作成していますが、http POST 操作では 401 (アクセスが拒否されました) で失敗します。単純な GET 操作では機能しますが、認証の方法がわかりません。仕様から、SPEGNA と委任された認証トークンは 2 つのオプションのようですが、プログラムでこれを行うにはどうすればよいですか? 私は自分のユーザー名とパスワードしか持っていません。RestSharp ライブラリを使用して、残りの操作を簡単にしています。

このコードは機能します

var client = new RestClient("http://cosmos.lab.fi-ware.org:14000");
request = new RestRequest("webhdfs/v1/user/<userID>");
request.AddParameter("op", "LISTSTATUS");
request.AddParameter("user.name", "<userID>");
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string

このコードは http 401 で失敗します

var client = new RestClient("http://cosmos.lab.fi-ware.org:14000");
var request = new RestRequest("webhdfs/v1/user/<userID>/structured_data123.txt",Method.PUT);
request.AddParameter("op", "CREATE");
request.AddParameter("user.name", "<userID>");
IRestResponse response = client.Execute(request);

HTTP ステータス 401 - org.apache.hadoop.security.authentication.client.AuthenticationException: 匿名リクエストは許可されていません

考え?アイデア?前もって感謝します!

4

1 に答える 1

0

RestSharp の専門家ではありませんが、addParameterメソッドが 5 種類のパラメーターをサポートしているのを見てきました (リンク)。

これらの 5 つのタイプによると、WebHDFS リクエストには「QueryString」タイプのパラメータが必要です (パラメータはリクエスト URI に追加する必要があり、リクエスト本文の一部ではありません)。

request.AddParameter("op", "CREATE", ParameterType.QueryString);
request.AddParameter("user.name", "<userID>", ParameterType.QueryString);
于 2015-06-22T06:14:40.727 に答える