我正在尝试User-Agent
在Android上使用React Native 设置。做过一些研究,看来我应该使用okhttp
拦截器
。我找到了一个示例,说明了如何完成此操作(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());
};
};
所以我终于想通了。这是okhttp
使用React Native 覆盖User-Agent的解决方案。
创建一个名为的文件CustomInterceptor.java
:
package com.trevor;
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class CustomInterceptor implements Interceptor {
public CustomInterceptor() {}
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder()
.removeHeader("User-Agent")
.addHeader("User-Agent", "Trevor")
.build();
return chain.proceed(requestWithUserAgent);
}
}
然后,在MainActivity.java
覆盖 的onCreate
方法:
...
import com.facebook.react.modules.network.OkHttpClientProvider;
...
public class MainActivity extends ReactActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
attachInterceptor();
}
private void attachInterceptor() {
OkHttpClient client = OkHttpClientProvider.getOkHttpClient();
client.networkInterceptors().add(new CustomInterceptor());
}
}
请注意,我正在导入com.facebook.react.modules.network.OkHttpClientProvider;
和覆盖该客户端,而不是创建一个香草,OkHttpClient
因为这是React Native将使用的那个。
我的应用程序在Lolipop设备上运行得很好,但在Kit Kat版本上甚至无法打开。它告诉我“不幸的是,应用程序已经停止了”。由于它还没有打开,我对这个问题毫无头绪。 你知道什么会导致与吉吉如此不兼容吗? 在Android/app/build.gradle中 编辑1:没有MultiDex应用程序不能编译。在果冻豆上的错误也是一样的。以下是日志: 致命异常:AsyncTask#1java.lang.
如果为android设备设置代理设置,它们是否适用于设备上的所有应用程序(包括浏览器)?或者它们只适用于浏览器? 我问的原因是,当你去更改Android设备上的代理设置有这个消息,它让我困惑:
我有一个奇怪的小问题:如何设置截击中的用户代理? 我需要一些网站的完整版本(桌面版),而不是手机版。 我试图将变量userAgent从“volley/0”改为“Mozilla/5.0(X11;Linux i686)AppleWebKit/537.36(KHTML,比如Gecko)Chrome/27.0.1453.93 Safari/537.36”(我的Chrome)。没什么区别。 有什么建议吗?
如何为每个WebView实例设置代理? 这是我到目前为止所拥有的: 这会启动一个带有谷歌页面的窗口。 但是如何设置代理?不是VM系统代理,而是每个WebView窗口的代理。
我也尝试过这个其他的解决方案。
问题内容: 我正在尝试使用带有URLConnection的Java解析网页。我尝试像这样设置用户代理: 但是最终的用户代理是我指定的,最后附加了“ Java / 1.5.0_19”。有没有一种方法可以在没有此添加的情况下真正设置用户代理? 问题答案: 暂时,将 system属性设置为可以解决问题(我前面没有代码)。 你可能会逃脱: 但这可能需要你与URL协议处理程序的初始化之间进行竞争,如果它在启