Как определить браузер в user agent через GET запрос приложения

Я развернул локальный сервер с кодом для определения user agenta. Из android studio через HttpURLConnection я делаю запрос на этот сервак и получаю ответ:

Dalvik/2.1.0 (Linux; U; Android 10; Android SDK built for x86 Build/QSR1.000000.000)

Если я открываю ссылку в webView, то я получаю полный ответ с указанием браузера. Как мне получить полный ответ, вроде такого, без использования webView в моем запросе?

Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Код на локальном сервере:

<?php 
echo $_SERVER['HTTP_USER_AGENT'];

Код запроса:

private void getResponse() {
        TestSendRequestTask task = new TestSendRequestTask();
        try {
            String response = task.execute(url).get();
            Log.i("MyResponse", response);
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private class TestSendRequestTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... strings) {
            HttpURLConnection urlConnection = null;
            StringBuilder builder = new StringBuilder();
            try {
                urlConnection = (HttpURLConnection) new URL(strings[0]).openConnection();
                urlConnection.connect();
                urlConnection.setRequestMethod("GET");;
                if (HttpURLConnection.HTTP_OK == urlConnection.getResponseCode()) {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line);
                    }
                    return builder.toString();
                } else {
                    Log.i("MyError", "Ошибка");
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
            }
            return null;
        }
    }

Я только набираюсь опыта и эта задачка мне сводит мозг уже несколько дней. Прошу помощи! Алярма!!!


Ответы (2 шт):

Автор решения: ЮрийСПб

Вам надо вручную добавить заголовок вот так:

urlConnection.setRequestProperty("User-Agent","your user agent");
→ Ссылка
Автор решения: Ratit Matarit

В общем и целом решение вот такое и полностью рабочее: При GET запросе через HttpURLConnection на сервер вам будет показан стоковый UA через Android Browser. Вариант рабочий заменить на urlConnection.setRequestProperty("User-Agent","your user agent");Как написал коллега сверху Но если нужен реальный, то я получил так: В нужной активности, в layout, создаем WebView и делаем его invisible; В коде получаем его и слизываем UA через: webView.getSettings().getUserAgentString(); Сохраняем в переменную. Делаем ее публичной и статической. И в классе унаследованного от AsyncTask мы эту переменную получаем и подставляем перед соединением. Выглядит так:

Ваша Activity (пример: MyClass):
public static String user_agent;

WebView webView = findViewById(R.id.web);
user_agent = webView .getSettings().getUserAgentString();

И получаем в YourClass extends AsyncTask<>

String ua = MyClass.user_agent ;
connection.setRequestProperty("User-Agent", ua);
connection.connect();

Пар-пар-па = Все!

→ Ссылка