通过截击调整Android中的用户代理
我想知道如何调整http请求中的标准用户代理。我正在使用截击库,我知道如何通过截击调整Android中的用户代理,android,http,http-headers,user-agent,android-volley,Android,Http,Http Headers,User Agent,Android Volley,我想知道如何调整http请求中的标准用户代理。我正在使用截击库,我知道如何 设置新的用户代理 以字符串形式检索默认用户代理(例如“Dalvik/1.6.0(Linux;U;Android 4.0.2;sdk构建/ICS_MR0”)=>System.getProperty(“http.agent”) 我不知道的是: 如何获取这个用户代理构建的单个元素,因此我只能用自定义字符串替换字符串“Dalvik/1.6.0” 这是可能的,还是我必须更换字符串 Thx为了为通过volley发送的所有请求
- 设置新的用户代理
- 以字符串形式检索默认用户代理(例如“Dalvik/1.6.0(Linux;U;Android 4.0.2;sdk构建/ICS_MR0”)=>System.getProperty(“http.agent”)
- 如何获取这个用户代理构建的单个元素,因此我只能用自定义字符串替换字符串“Dalvik/1.6.0”
Thx为了为通过volley发送的所有请求全局设置用户代理,以下是我的解决方案: 在初始化截取请求队列时,不要使用方便的方法
volley.newRequestQueue(Context);
,而是使用以下代码段:
private RequestQueue makeRequestQueue(Context context) {
DiskBasedCache cache = new DiskBasedCache(new File(context.getCacheDir(), DEFAULT_CACHE_DIR), DISK_CACHE_SIZE);
BasicNetwork network = new BasicNetwork(new MyHurlStack());
RequestQueue queue = new RequestQueue(cache, network);
queue.start();
return queue;
}
public static class MyHurlStack extends HurlStack {
@Override
public HttpResponse executeRequest(Request<?> request, Map<String, String> additionalHeaders) throws IOException, AuthFailureError {
if (additionalHeaders == null || Collections.emptyMap().equals(additionalHeaders) {
additionalHeaders = new HashMap<>();
}
additionalHeaders.put("User-Agent", "test_user_agent_in_volley");
return super.executeRequest(request, additionalHeaders);
}
}
private RequestQueue makeRequestQueue(上下文){
DiskBasedCache=新的DiskBasedCache(新文件(context.getCacheDir(),默认为\u cache\u DIR),磁盘\u cache\u大小);
基本网络=新的基本网络(新的MyHurlStack());
RequestQueue=新的RequestQueue(缓存、网络);
queue.start();
返回队列;
}
公共静态类MyHurlStack扩展了HurlStack{
@凌驾
公共HttpResponse executeRequest(请求-请求,映射附加标头)引发IOException,AuthFailureError{
if(additionalHeaders==null | | Collections.emptyMap().equals(additionalHeaders){
additionalHeaders=newHashMap();
}
附加标题。put(“用户代理”、“测试用户代理”);
返回super.executeRequest(请求、附加标头);
}
}
此解决方案假定您的目标api级别>=9,因此我们使用HurlStack
之所以这样做,是因为在HurlStack.executeRequest(请求请求,映射附加标头)
方法中,添加到附加标头的内容稍后将添加到HttpUrlConnection请求属性中,如connection.addRequestProperty(headerName,Map.get(headerName));
是,
构建。指纹包含您需要的所有信息,
要获取各个部分,请使用各个常量字符串
有关详细的操作系统版本信息,请使用
System.getProperty(“http.agent”)
返回如下内容:
Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)
可以使用和的组合来构建此应用程序的所有部分
这是在模拟器上运行的android.os.Build中的一个示例:
Build.BOARD = "goldfish_x86"
Build.BOOTLOADER = "unknown"
Build.BRAND = "google"
Build.DEVICE = "generic_x86"
Build.DISPLAY = "sdk_gphone_x86-userdebug 9 PSR1.180720.075 5124027 dev-keys"
Build.FINGERPRINT = "google/sdk_gphone_x86/generic_x86:9/PSR1.180720.075/5124027:userdebug/dev-keys"
Build.HARDWARE = "ranchu"
Build.HOST = "abfarm904"
Build.ID = "PSR1.180720.075"
Build.MANUFACTURER = "Google"
Build.MODEL = "Android SDK built for x86"
Build.PRODUCT = "sdk_gphone_x86"
Build.SUPPORTED_32_BIT_ABIS = {"x86"}
Build.SUPPORTED_64_BIT_ABIS = {}
Build.SUPPORTED_ABIS = {"x86"}
Build.TAGS = "dev-keys"
Build.TIME = 1541887073000
Build.TYPE = "userdebug"
Build.USER = "android-build"
Build.UNKNOWN = "unknown"
Build.VERSION.BASE_OS = ""
Build.VERSION.CODENAME = "REL"
Build.VERSION.INCREMENTAL = "5124027"
Build.VERSION.PREVIEW_SDK_INT = 0
Build.VERSION.RELEASE = "9"
Build.VERSION.SDK_INT = 28
Build.VERSION.SECURITY_PATCH = "2018-09-05"
根据谷歌的文档,这些属性始终由Dalvik VM提供:
file.separator = /
java.class.path = .
java.class.version = 50.0
java.compiler = Empty
java.ext.dirs = Empty
java.home = /system
java.io.tmpdir = /sdcard
java.library.path = /vendor/lib:/system/lib
java.vendor = The Android Project
java.vendor.url = http://www.android.com/
java.version = 0
java.specification.version = 0.9
java.specification.vendor = The Android Project
java.specification.name = Dalvik Core Library
java.vm.version = 1.2.0
java.vm.vendor = The Android Project
java.vm.name = Dalvik
java.vm.specification.version = 0.9
java.vm.specification.vendor = The Android Project
java.vm.specification.name = Dalvik Virtual Machine Specification
line.separator = \n
os.arch = armv7l
os.name = Linux
os.version = 2.6.32.9-g103d848
path.separator = :
user.dir = /
user.home = Empty
user.name = Empty
因此,默认用户代理似乎由以下部分组成:
System.getProperty("java.vm.name") // Dalvik
System.getProperty("java.vm.version") // 2.1.0
System.getProperty("os.name") // Linux
"U" // not sure where to get this
"Android" // or this, probably safe to hard code though
Build.VERSION.RELEASE // 9
Build.MODEL // Android SDK built for x86
Build.ID // PSR1.180720.075
我只知道如何通过使用System.getProperty()和“java.vm.name”、“java.vm.version”和“os.name”来获取“Dalvik”、“1.6.0”和“Linux”部分。如何获取其余部分?
System.getProperty("java.vm.name") // Dalvik
System.getProperty("java.vm.version") // 2.1.0
System.getProperty("os.name") // Linux
"U" // not sure where to get this
"Android" // or this, probably safe to hard code though
Build.VERSION.RELEASE // 9
Build.MODEL // Android SDK built for x86
Build.ID // PSR1.180720.075