繁体   English   中英

为外部 API 的网络请求更改 android 应用程序的默认用户代理的最佳方法是什么?

[英]What is the best way to change the default User Agent for an android app for network request by an external API?

我目前正在开发我的第一个应用程序,但我在网络和开发方面的经验并不丰富,所以我可以寻求一些帮助。 正如问题所述,我需要为所有网络请求设置自定义用户代理,但我遇到了问题。 我设置了一个 okHTTP 中断,但这似乎不起作用。

我的 okHTTP 代码是这样的:

static class UserAgentInterceptor implements Interceptor{
        public String useragent;
        public UserAgentInterceptor(String useragent){
            this.useragent = useragent;

        }
        public UserAgentInterceptor() {
            this(String.format(Locale.US,
                    "%s/%s (Android %s; %s; %s %s; %s)",
                    "MY APP HERE",
                    "3.9",
                    Build.VERSION.RELEASE,                
                    Build.MODEL,
                    Build.BRAND,
                    Build.DEVICE,
                    Locale.getDefault().getLanguage()));
        }

        @NotNull
        @Override
        public Response intercept(Chain chain) throws IOException {
        
            Request userAgentRequest = chain.request()
                    .newBuilder()
                    .header("User-Agent", useragent)
                    .build();
            return chain.proceed(userAgentRequest);
        }

    }


@Override
    protected void onCreate(Bundle savedInstanceState) {
        new UserAgentInterceptor();
        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_main);
}

我认为在我的应用程序中实现 okHTTP 没有任何问题(我正确地将实现放在我的 build.gradle 文件中),所以问题一定在其他地方。

我可能是错的,但我认为这是因为我的应用程序不是发出 http 请求,而是一个外部 API。 再一次,让我说这只是我的理论,为什么它不起作用。 如果这确实是我遇到此错误的原因,是否有办法解决此问题(也许是改造)?

我感谢您对这个问题的任何帮助,以及对 Retrofit 实际用途的解释,因为我对此也不太确定。 谢谢你。

您需要使用addInterceptor将拦截器添加到客户端

https://square.github.io/okhttp/interceptors/#application-interceptors

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new LoggingInterceptor())
    .build();

Request request = new Request.Builder()
    .url("http://www.publicobject.com/helloworld.txt")
    .header("User-Agent", "OkHttp Example")
    .build();

Response response = client.newCall(request).execute();
response.body().close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM