1

次のコードを使用してRESTリクエストを送信していますが、ユーザー名とパスワードが必要なため、リクエストは失敗しました(401エラー)。

それらをURLに追加する方法は?ブラウザでURLをコピーし、その最後にユーザー名とパスワードを追加しても、ブラウザはログインページをポップアップするので、コードにユーザー名とパスワードのパラメータを追加する必要があると思いますが、どうすればよいですか?

  URL url = new URL("www.example.com/user?ID=1234");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
                if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
            throw new RuntimeException("Failed : HTTP error code : "
                + conn.getResponseCode());
        }

コードに以下を追加しましたが、それでも401エラーが発生します。

             conn.setRequestProperty("username", "myusername");
             conn.setRequestProperty("password", "mypassword");
4

1 に答える 1

1

これを試して:

String params="username=myusername&password=mypassword";
conn.getOutputStream().write(params.getBytes());
conn.getOutputStream().flush();
conn.getOutputStream().close();

または、パラメータをエンコードする必要があるかもしれません:

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

String postContent = URLEncoder.encode("username", "UTF-8") + "=" + 
                     URLEncoder.encode(myusername, "UTF-8") + "&" + 
                     URLEncoder.encode("password", "UTF-8") + "=" + 
                     URLEncoder.encode(mypassword, "UTF-8") ;

dos.write(postContent.getBytes());
dos.flush();
dos.close();

基本認証について

String userPassword = username + ":" + password;
String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", "Basic " + encoding);
uc.connect();
于 2013-03-22T04:31:27.843 に答える