gpt4 book ai didi

java - Android 上的 React Native 和 okhttp - 设置用户代理

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:04 28 4
gpt4 key购买 nike

我正在尝试在 Android 上使用 React Native 设置 User-Agent。做了一些研究,看起来我应该使用 okhttp Interceptor。我找到的一个示例解释了应该如何完成(Link),但我不确定如何注册拦截器。

所以为了设置 User-Agent 我正在使用这个类:

public class CustomInterceptor implements Interceptor {
@Override public Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder()
.removeHeader("User-Agent")
.header("User-Agent", "Trevor")
.build();
return chain.proceed(requestWithUserAgent);
}
}

那么剩下的就是注册上面的拦截器那么应该在哪里注册呢?也许在 MainActivity.java 中?

OkHttpClient okHttp = new OkHttpClient();
okHttp.interceptors().add(new CustomInterceptor());

我在构建应用程序时没有遇到任何错误,所以我认为 CustomInterceptor 应该没问题 - 只需要让应用程序使用它即可。

更新:我目前正在尝试在 MainActivity 中注册拦截器,但它不会接收它:

public class MainActivity extends ReactActivity {

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

OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new CustomInterceptor());

};

};

最佳答案

这里的所有答案都不适用于 RN 0.63.2。我能够让它正常工作,并且在我的研究中能够找到(尽管非常稀少)支持此功能的文档。

我能找到的唯一文档是 this PR有人添加了对此功能的支持(并打破了当前接受的答案)。当我尝试按照 PR 中的记录添加拦截器时,我遇到了一个与 CookieJar 相关的异常,我能够在 this (unresolved 🙄) issue 中找到解决方案。 .

简单描述:

在与 MainApplication 相同的文件夹中添加一个名为 UserAgentInterceptor.java 的 Java 类,并将其放入其中:

package YOUR.PACKAGE.NAME; // <-- REPLACE ME

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class UserAgentInterceptor implements Interceptor {

public UserAgentInterceptor() {}

@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder()
.removeHeader("User-Agent")
.addHeader("User-Agent", "YOUR USER AGENT") // <-- REPLACE ME
.build();

return chain.proceed(requestWithUserAgent);
}

}

然后在名为 UserAgentClientFactory.java 的同一文件夹中创建另一个 Java 类并将其放入其中:

package YOUR.PACKAGE.NAME; // <-- REPLACE ME

import com.facebook.react.modules.network.OkHttpClientFactory;
import com.facebook.react.modules.network.ReactCookieJarContainer;

import okhttp3.OkHttpClient;

public class UserAgentClientFactory implements OkHttpClientFactory {
public OkHttpClient createNewNetworkModuleClient() {
return new OkHttpClient.Builder()
.cookieJar(new ReactCookieJarContainer())
.addInterceptor(new UserAgentInterceptor())
.build();
}
}

然后在您的 MainApplication onCreate 方法中像这样注册工厂:

...
import com.facebook.react.modules.network.OkHttpClientProvider;
...

@Override
public void onCreate() {
super.onCreate();

OkHttpClientProvider.setOkHttpClientFactory(new UserAgentClientFactory());

// Your other code stuffs

}

就是这样!

关于java - Android 上的 React Native 和 okhttp - 设置用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119761/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com