我正在使用 Flutter 开发一个适用于 Android、iOS 和 Web 的多平台项目。如何获得
user-agent
添加到请求的标头?
我使用
http
包来处理请求。
我想要的示例用户代理:
谷歌sdk_gphone_x86,Android 11(30)
Postman运行时/7.26.8
Chrome、Mozilla、Safari
使用设备信息加上包
然后像下面这样使用:
import 'package:device_info_plus/device_info_plus.dart';
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
print('Running on ${androidInfo.model}'); // e.g. "Moto G (4)"
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
print('Running on ${iosInfo.utsname.machine}'); // e.g. "iPod7,1"
WebBrowserInfo webBrowserInfo = await deviceInfo.webBrowserInfo;
print('Running on ${webBrowserInfo.userAgent}'); // e.g. "Mozilla/5.0
(X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
我通过这个函数恢复了用户代理。我使用 device info plus 包来检索信息。
Future<String> getUserAgent() async {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
String userAgent = '';
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
userAgent =
'Mozilla/5.0 (Linux; Android ${androidInfo.version.release}; ${androidInfo.model}) '
'AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36';
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
userAgent =
'Mozilla/5.0 (iPhone; CPU iPhone OS ${iosInfo.systemVersion} like Mac OS X) '
'AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/${iosInfo.identifierForVendor}';
} else {
WebBrowserInfo webBrowserInfo = await deviceInfo.webBrowserInfo;
userAgent = webBrowserInfo.userAgent!;
}
return userAgent;
}