我想在我编程的应用程序中使用来自网站的信息。我需要先登录网站。网站的html代码是这样的:
<div>Geben Sie Ihren Benutzernamen und Ihr Passwort ein, um sich an der Website anzumelden:</div>
<!-- ###LOGIN_FORM### -->
<form action="/fuer-studierende/intranet/" target="_top" method="post" onsubmit="; return true;">
<fieldset>
<legend>Anmelden</legend>
<div>
<label for="user">Benutzername:</label>
<input type="text" id="user" name="user" value="" />
</div>
<div>
<label for="pass">Passwort:</label>
<input type="password" id="pass" name="pass" value="" data-rsa-encryption="" />
</div>
我需要在“值”之后的第8行中填写用户名,并在“值”之后的第12行中填写密码。我该怎么办?
答案 0 :(得分:0)
您必须使用flutters WebView包,才能使用JavaScript将数据从Flutter发送到HTML。
遵循此简短教程,以快速了解WebView软件包: https://medium.com/flutter/the-power-of-webviews-in-flutter-a56234b57df2
如果将WebViewController分配给WebView(请参阅教程),则可以使用控制器从Flutter将JavaScript消息发送到HTML网页。
在WebView小部件的«onPageFinished»函数中使用以下代码:
_webController.evaluateJavascript(
'''
var email = document.getElementById("user");
var password = document.getElementById("pass");
email.value = "${_yourFlutterUserTextController.text}";
password.value = "${_yourFlutterPasswordTextController.text}"
'''
);
如您所见,您可以在Flutter应用中放置Flutter变量(如用户名和密码),并将JavaScript代码段发送到执行JavaScript的网站。
您还可以在填写登录名后点击按钮。
希望这会有所帮助,祝你好运!
答案 1 :(得分:0)
当您在浏览器中填写这些字段并点击submit
时,浏览器就会使用action
标签中指定的method
将请求发送到form
URL。如果方法是POST
,它将收集字段,并使用称为x-www-form-urlencoded
的格式对其进行编码,并将其添加为请求的正文。
(请注意,浏览器可能会执行一些其他步骤,例如运行JavaScript,这可能会更改值。您需要以相同的方式更改值。)
Dart package:http
为您提供所有这些功能。如果您提供Map<String, String>
作为post
的body参数,它将为您编码并设置内容类型。
void send() async {
var form = <String, String>{
'user': 'miwa',
'pass': 'M1VVA%',
};
var res = await http.post(
'https://some.website.de/fuer-studierende/intranet/',
body: form,
);
print(res.statusCode);
print(res.body);
}
当然,作为响应,您可能会收到大量HTML和会话Cookie,分别必须对其进行解析和提取。