【发布时间】:2018-10-29 05:08:52
【问题描述】:
我正在构建一个颤振应用程序,它需要将用户代理信息与 http 请求一起发送。我正在使用http dart package 发送请求。如何在 Flutter 中获取用户代理字符串并将其与 http 包一起使用?
【问题讨论】:
我正在构建一个颤振应用程序,它需要将用户代理信息与 http 请求一起发送。我正在使用http dart package 发送请求。如何在 Flutter 中获取用户代理字符串并将其与 http 包一起使用?
【问题讨论】:
我是通过在 Flutter 中调用原生方法来实现的。首先你必须在 android Main Activity 中添加方法通道
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, MethodChannel.Result result) {
if (call.method.equals("getUserAgent")) {
result.success(System.getProperty("http.agent"));
} else {
result.notImplemented();
}
}
});
}
然后getUserAgent()方法可以像下面这样在flutter中调用
Future<String> _getUserAgent() async {
try {
return await platform.invokeMethod('getUserAgent');
} catch (e) {
return 'Unknown';
}
}
【讨论】:
(20, 15): Expecting member declaration
您可以使用flutter_user_agent 库以跨平台方式获取它:https://pub.dev/packages/flutter_user_agent。
import 'package:flutter_user_agent/flutter_user_agent.dart';
...
String ua = await FlutterUserAgent.getPropertyAsync('userAgent');
【讨论】:
这对我有用 flutter_user_agent 库:https://pub.dev/packages/flutter_user_agent
如上所述
String _userAgent = await FlutterUserAgent.getPropertyAsync('userAgent');
final _response = await http.get(_url, headers: {
'Content-Type': 'application/json',
'Accept-Charset': 'utf-8',
'User-Agent': '${_userAgent.toLowerCase()}',
});
【讨论】:
找到了一个库。看看这个库做了什么会很有趣,我认为不需要为此实现一个库。
https://pub.dartlang.org/packages/user_agent
关于如何使用它的示例:
main() async {
app.get('/', (req, res) async {
var ua = new UserAgent(req.headers.value('user-agent'));
if (ua.isChrome) {
res.redirect('/upgrade-your-browser');
return;
} else {
// ...
}
});
}
或者,如果您想向 http 客户端添加用户代理,您可以这样做:
Future<http.Response> fetchPost() {
return http.get(your_url,
// Send user-agent header to your backend
headers: {HttpHeaders.userAgentHeader: "your_user_agent"},
);
}
您可以查看 HttpHeaders 以查看预定义标题的完整列表,虽然 headers 有一个映射,但您可以根据需要创建自己的标题。
【讨论】:
String userAgent = System.getProperty("http.agent"); 可以用来获取android中的用户代理。