Προσπαθώ να προσθέσω επικεφαλίδα για το αίτημά μου χρησιμοποιώντας το HttpUrlConnection
αλλά η μέθοδος setRequestProperty()
δεν φαίνεται να λειτουργεί. Η πλευρά του διακομιστή δεν λαμβάνει καμία αίτηση με την επικεφαλίδα μου.
HttpURLConnection hc;
try {
String authorization = "";
URL address = new URL(url);
hc = (HttpURLConnection) address.openConnection();
hc.setDoOutput(true);
hc.setDoInput(true);
hc.setUseCaches(false);
if (username != null && password != null) {
authorization = username + ":" + password;
}
if (authorization != null) {
byte[] encodedBytes;
encodedBytes = Base64.encode(authorization.getBytes(), 0);
authorization = "Basic " + encodedBytes;
hc.setRequestProperty("Authorization", authorization);
}
Έχω χρησιμοποιήσει τον ακόλουθο κώδικα στο παρελθόν και είχε λειτουργήσει με ενεργοποιημένο τον βασικό έλεγχο ταυτότητας στο TomCat:
URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();
String userCredentials = "username:password";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));
myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setRequestProperty("Content-Length", "" + postData.getBytes().length);
myURLConnection.setRequestProperty("Content-Language", "en-US");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
Μπορείτε να δοκιμάσετε τον παραπάνω κώδικα. Ο παραπάνω κώδικας είναι για POST και μπορείτε να τον τροποποιήσετε για GET
Επειδή δεν βλέπω αυτή την πληροφορία στις παραπάνω απαντήσεις, ο λόγος που το απόσπασμα κώδικα που δημοσιεύτηκε αρχικά δεν λειτουργεί σωστά είναι επειδή η μεταβλητή encodedBytes
είναι μια τιμή byte[]
και όχι μια τιμή String
. Αν περάσετε το byte[]
σε μια new String()
όπως παρακάτω, το απόσπασμα κώδικα λειτουργεί τέλεια.
encodedBytes = Base64.encode(authorization.getBytes(), 0);
authorization = "Basic " + new String(encodedBytes);
Τελικά αυτό λειτούργησε για μένα
private String buildBasicAuthorizationString(String username, String password) {
String credentials = username + ":" + password;
return "Basic " + new String(Base64.encode(credentials.getBytes(), Base64.DEFAULT));
}