Как отправить http запрос с реальным заголовком устройства

Рейтинг: 0Ответов: 1Опубликовано: 19.04.2023

Я создаю 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Принят

Вам нужно добавить свой перехватчик где вручную будете подставлять нужный вам 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)

вот есть подобная проблема.