我正在构建一个Flutter应用程序,该应用程序需要与http请求一起发送用户代理信息。我正在使用http dart package发送请求。如何在flutter中获取用户代理字符串并将其与http包一起使用?
答案 0 :(得分:1)
我通过在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()
方法可以像下面这样颤动地调用
Future<String> _getUserAgent() async {
try {
return await platform.invokeMethod('getUserAgent');
} catch (e) {
return 'Unknown';
}
}
答案 1 :(得分:0)
您可以使用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');
答案 2 :(得分:0)
通过使用 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()}',
});
答案 3 :(得分:-1)
找到了一个做到这一点的图书馆。查看该库的功能会很有趣,我认为不需要为此实现一个库。
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
可以绘制地图,但是您可以根据需要创建自己的标头。