Как отправить http запрос с реальным заголовком устройства
Я создаю get запрос используя okhttp, и у меня он отправляется с заголовком "user-agent : okhttp/4.10.0" а требуется заголовок формата "user-agent : AndroidApp (Android 11; SDK 30; armeabi-v7a; samsung SM-A505FM; ru; 2340x1080)"
private fun sendGet(link: String) = CoroutineScope(Dispatchers.IO).launch {
val client = OkHttpClient()
val request = Request.Builder()
.url(link)
.build()
try {
val response = client.newCall(request).execute()
if (!response.isSuccessful) {
return@launch
}
val finalUrl = response.body!!.string()
openGoogleTabs(finalUrl)
} catch (e: IOException) {
}
}
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Вам нужно добавить свой перехватчик где вручную будете подставлять нужный вам user-agent:
val client = OkHttpClient.Builder()
.addNetworkInterceptor { chain ->
chain.proceed(
chain.request()
.newBuilder()
.header("User-Agent", "AndroidApp (Android 11; SDK 30; armeabi-v7a; samsung SM-A505FM; ru; 2340x1080)")
.build()
)
}
.build()
либо в отдельном файле:
public class UserAgentInterceptor implements Interceptor {
private final String mUserAgent;
public UserAgentInterceptor(String userAgent) {
mUserAgent = userAgent;
}
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.header("User-Agent", mUserAgent)
.build();
return chain.proceed(request);
}
}
с добавлением при формировании клиента:
val client = OkHttpClient.Builder()
.addInterceptor(UserAgentInterceptor())
Если не будет добавляться, то значит не перезаписывается умолчательный хедер, и его нужно будет удалять (тоже в перехватчике):
.removeHeader("User-Agent")
.addHeader("User-Agent", userAgent)
вот есть подобная проблема.