私はTeamcityサーバーにhttp RESTリクエストを送信することについて何かしています。 認証部分については、以下のコードを使用すると401エラーが発生します。httpリクエストを送信する前にBase64関連のアルゴリズムを使用する必要があります
public class Client {
public static void main(String args[]){
try{
Client client = new Client();
client.sendGet();
//client.sendPost();
}catch(Exception e){
e.printStackTrace();
}
}
String USER_AGENT = "";
private void sendGet() throws Exception {
String url = "http://localhost:80/httpAuth/app/rest/builds";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
String login = "gearon";
String password = "gearonpassword";
String token = login + ":" + password;
con.setRequestProperty ("Authorization", "Basic " + token);
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
}
}
私はコード
byte[] tokenArr = StringUtils.getBytesUtf8(token);
String encoded = new String(Base64.encodeBase64(tokenArr));
con.setRequestProperty ("Authorization", "Basic " + token);
の下に追加することで問題を解決し、これは私の問題を解決し、なぜしかし、私は把握することはできません。私のユーザ名やパスワードには特殊文字はありません。そして、私は、プロジェクト - >プロパティ - >リソース - >テキストファイルエンコーディング - > UTF-8を右クリックして、プロジェクトのエンコーディングをEclipseでUTF-8に設定しました。
getBytesUtf8
方法のJavadocは
新しいバイト配列に結果を格納し、UTF-8 文字セットを使用してバイトシーケンスに与えられた文字列をエンコードしています。
私のプロジェクトで既にUTF-8を使用している場合、このメソッドは値を追加しません。別の方法encodeBase64
について
、Javadocはある:
は、Base64アルゴリズムを使用してバイナリデータを符号化するが、チャンク 出力をしません。
多分、驚くべきことが起こります。私はBase64について何かを読むwiki
私はこの問題について自分自身を明確にすることはできません。だから、誰が何が起こったのか教えてもらえますか?
ユーザー名とパスワードは、base64でエンコードする必要があります。 RFCはそれを必要とします。 –
ブラウザから基本認証を必要とするリソースにアクセスしようとすると、ユーザー名とパスワードの追加を要求するダイアログが表示されます。コードから同じリソースにアクセスしようとすると、HTTPにBase64エンコーディングが必要です。 –