Я пытаюсь использовать REST API с Android-приложением, которое я разрабатываю в Android Studio. Я разработал API, используя Spring Boot.
Проблема:
Всякий раз, когда я звоню в свой API, я всегда возвращаю неавторизованный ответ 401. Msgstr "Предварительно аутентифицированная точка входа называется. Отклонение доступа."
Я настроил мой CORS следующим образом:
cors: allowed-origins: "*" allowed-methods: GET, PUT, POST, DELETE, OPTIONS allowed-headers: "*" exposed-headers: allow-credentials: true max-age: 1800
Android HttpURLConnection всегда неавторизованный ответ 401 (Spring Boot REST API)
Моего апи работает на локальном хосте: 8080, и я делаю запросы от моего устройства с моим WLAN адресом IPv4.
Такие, как: завиток -v -X ПОЛУЧИТЬ http://192.168.1.xx:8080/api/users
Это возвращает 200 OK ответ.
Я также могу назвать это в почтальоне/DHC и т. Д. И получить ответ 200 OK.
Однако, когда я вызываю тот же адрес с HttpURLConnection через мое устройство Android, я получаю ответ 401.
Noob разработчик здесь - любые идеи относительно того, что может быть причиной этого, будем очень благодарны!
Редактировать, чтобы включить мой запрос GET:
@Override
protected String doInBackground(String... params){
String stringUrl = params[0];
String result;
String inputLine;
try {
//Create a URL object holding our url
URL myUrl = new URL(stringUrl);
//Create a connection
HttpURLConnection connect =(HttpURLConnection)
myUrl.openConnection();
connect.setRequestMethod(REQUEST_METHOD); // GET
connect.setRequestProperty("Host", HOST);
connect.setRequestProperty("Connection", "keep-alive");
connect.setRequestProperty("Origin", ORIGIN);
connect.setRequestProperty("User-Agent", System.getProperty("http.agent"));
connect.setRequestProperty("Content-Type", CONTENT_TYPE);
connect.setRequestProperty("Accept", "*/*");
connect.setRequestProperty("Accept-Encoding", ACCEPT_ENCODING);
connect.setRequestProperty("Accept-Language", ACCEPT_LANGUAGE);
connect.setDoOutput(true);
connect.setDoInput(true);
//Connect to our url
connect.connect();
String responseMessage = connect.getResponseMessage(); // Unathorized
int responseCode = connect.getResponseCode(); //401
//Create a new InputStreamReader
InputStreamReader streamReader = new
InputStreamReader(connect.getInputStream());
//Create a new buffered reader and String Builder
BufferedReader reader = new BufferedReader(streamReader);
StringBuilder stringBuilder = new StringBuilder();
//Check if the line we are reading is not null
while((inputLine = reader.readLine()) != null){
stringBuilder.append(inputLine);
}
//Close our InputStream and Buffered reader
reader.close();
streamReader.close();
//Set our result equal to our stringBuilder
result = stringBuilder.toString();
}
catch(IOException e){
e.printStackTrace();
result = null;
}
return result;
}
Это может помочь вам - Http: // StackOverflow .com/questions/6176609/connect-an-android-device-to-a-web-service-on-local-host – Rahul
Заменить: - InputStreamReader streamReader = new InputStreamReader (connect.getInputStream()); С: - InputStreamReader streamReader = new InputStreamReader (connect.getErrorStram()); Это поможет вам отслеживать, почему 401 тогда вы можете продолжить решение этой проблемы. 401-- проблема на стороне сервера, сервер не может обработать ваш запрос, проверьте, нужно ли передавать данные в заголовке или URL-адресе, когда вы используете запрос на получение. – Mrinmoy