Я пытаюсь отправить POST request
с некоторыми параметрами String и jpeg image file
. Весь код находится в IntentService
.Android 401 Unauthorized HttpURLConnection с Basic Auth
Я использую заголовок авторизации для основного auth
(учетные данные работают при использовании их с другой веб-службой).
Я не могу получить то, что не так, может быть, неисправное свойство запроса. Имейте в виду, что я отправляю Strings, но и изображение.
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
try {
FileInputStream fileInputStream = new FileInputStream(new File(filePath));
URL url = new URL(urlServer);
String credentials = "[email protected]"+":"+"testtest";
final String basicAuth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Authorization", basicAuth);
connection.setRequestProperty("Content-Type", "multipart/form-data");
connection.setRequestProperty("Accept", "application/json");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setInstanceFollowRedirects(false);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes("imei="+ getImei()
+ "&id=38"
+ "&type = b"
+ "&step=1"
+ "&image="
);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
int sentBytes = 0;
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
mBuilder.setProgress(100,(int) (sentBytes * 100/bytesAvailable),false);
mNotifyManager.notify(1, mBuilder.build());
outputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
sentBytes += bufferSize;
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
mBuilder.setContentText("Upload complete");
mBuilder.setProgress(0, 0, false);
mNotifyManager.notify(1, mBuilder.build());
fileInputStream.close();
outputStream.flush();
outputStream.close();
if(connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP){
url = new URL(connection.getHeaderField("Location"));
connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("Authorization", basicAuth);
}
InputStreamReader isr = null;
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
String line = "";
isr = new InputStreamReader(
connection.getInputStream());
reader = new BufferedReader(isr);
line = reader.readLine();
while (line != null) {
sb.append(line);
try {
line = reader.readLine();
}catch (Exception e){
line = null;
}
}
String a;
a = sb.toString();
} catch (Exception ex) {
ex.printStackTrace();
}
Попытайтесь использовать DefaultHttpClient –
401 Ошибка не обязательно зависит от того, что вы неправильно указали имя пользователя или пароль. Это может быть также из-за неправильного кодирования. –