3
url = new URL(UPLOAD_URL);

urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("PUT");
urlConnection.setRequestProperty("content-type", "application/json");
urlConnection.setFixedLengthStreamingMode(responseJSONArray.toString(2).getBytes("UTF8").length);
urlConnection.setDoInput(false);
urlConnection.setDoOutput(true);
urlConnection.setConnectTimeout(this.CONNECT_TIMEOUT);
urlConnection.connect();
OutputStream output = urlConnection.getOutputStream();
output.write(responseJSONArray.toString(2).getBytes("UTF8"));
output.close();

また、以前にAuthenticatorを次のように設定しました。

Authenticator.setDefault(new Authenticator()
{
 @Override
  protected PasswordAuthentication getPasswordAuthentication()
  {
    return new PasswordAuthentication(loginNameString, passwordString.toCharArray());
  }
});

正しいログイン情報を入力しましたが、サーバーが401コードで応答します。(ただし、同様の GET 要求が機能します。) その上getPasswordAuthentication()、ストリームへの接続と書き込みのプロセスでメソッドが呼び出されていません。(入れたから分かるLog.v("app", "password here")。)

何故ですか?

4

1 に答える 1

2

Authenticator の使用が機能しない理由についてはお答えできませんが、通常は次のアプローチを使用します。

    String webPage = "http://192.168.1.1";
    String name = "admin";
    String password = "admin";

    String authString = name + ":" + password;
    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
    String authStringEnc = new String(authEncBytes);

    URL url = new URL(webPage);
    URLConnection urlConnection = url.openConnection();
    urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
    InputStream is = urlConnection.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);

それを試してみてください。基本認証を使用するだけで十分です。

于 2011-08-15T10:09:20.450 に答える