Как определить браузер в 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");
В общем и целом решение вот такое и полностью рабочее:
При 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();
Пар-пар-па = Все!