安卓服务网页视图

3
我需要从网络服务器下载HTML文件,但是我需要登录该网站。登录表单位于iframe中,既无法访问也似乎不可能直接访问(没有POST)。因此,我在我的应用程序中使用JavaScript自动填写和提交表单。但现在我需要在后台(作为服务)下载此文件。不幸的是,服务没有UI,因此好像不能像以前那样使用Webview。所以这里有我的问题:是否可以在服务中使用Webview?是否有任何其他方法可以使用JavaScript与网站交互?还是有任何其他可自动登录到该网站的可能性吗?该网站是:https://light.dsbcontrol.de/DSBlightWebsite/(S(jlbbytzvocksc4v2i30gtjli))/Homepage/Player.aspx?ID=b4457c67-24a2-446f-af41-810fba7f723d&MaxWidth=1010&MaxHeight=607&MyDate=0。非常感谢您提供的任何帮助。

你在Android服务中使用WebView成功了吗? - WebViewer
2个回答

2

如果我没有理解错误,当您按下“weiter”按钮(我猜这是一个“提交”按钮)时,会发生以下情况:

POST /DSBlightWebsite/(S(jlbbytzvocksc4v2i30gtjli))/Homepage/IFrame.aspx?ID=b4457c67-24a2-446f-af41-810fba7f723d&Width=937&Height=530&MyDate=0 HTTP/1.1
Host: light.dsbcontrol.de
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: https://light.dsbcontrol.de/DSBlightWebsite/(S(jlbbytzvocksc4v2i30gtjli))/Homepage/IFrame.aspx?ID=b4457c67-24a2-446f-af41-810fba7f723d&Width=937&Height=530&MyDate=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 273

__VIEWSTATE=%2FwEPDwULLTEwODU4OTkxMzRkZGl5uRxMYz320dUnYalV0rRm4KBLu%2F%2FmncdSoRUaM2Cr&__EVENTVALIDATION=%2FwEWBALArNzjCQK10rnVAQLLus%2B1BQLpvY%2BZD1oB3Xt3JbIIPV05vCoiVbXiTq5FzSyFDPswYprWZto4&ctl02%24txtBenutzername=sdfasf&ctl02%24txtPasswort=asfsad&ctl02%24btnLogin=weiter

从下面可以看到,这是一个 application/x-www-form-urlencoded 的POST请求发送到 light.dsbcontrol.de/DSBlightWebsite/(S(jlbbytzvocksc4v2i30gtjli))/Homepage/IFrame.aspx?ID=b4457c67-24a2-446f-af41-810fba7f723d&Width=937&Height=530&MyDate=0,包含一系列参数:

__VIEWSTATE=/wEPDwULLTEwODU4OTkxMzRkZGl5uRxMYz320dUnYalV0rRm4KBLu//mncdSoRUaM2Cr
__EVENTVALIDATION=/wEWBALArNzjCQK10rnVAQLLus+1BQLpvY+ZD1oB3Xt3JbIIPV05vCoiVbXiTq5FzSyFDPswYprWZto4
ctl02$txtBenutzername=sdfasf
ctl02$txtPasswort=asfsad
ctl02$btnLogin=weiter

我相信你可以使用HttpClient直接进行POST操作,而不需要使用JavaScript / WebView。你只需要使用您的参数即可。但是我意识到有些参数可能不太清楚,但这可能会在Web API文档中解释。如果没有Web API文档,则认为此方法可能无法正常工作,因为您可能不知道要传递哪些参数值。


我已经尝试过这种方法。似乎无法直接访问iframe.aspx,这意味着我无法向其发布任何内容。这就是为什么我使用了JavaScript。顺便说一下,没有文档。 - incognym
好的!我找到了一个解决方案,可以发送POST请求!引用者必须与我发送POST请求的URL完全相同,并且参数VIEWSTATE和EVENTVALIDATION(可以在表单页面上找到)必须像在登录页面中找到的那样准确地发送。虽然有些复杂,但这是一种可行的方法。感谢您指导我正确的方向。现在我可以完成我的应用程序了。 - incognym
@incognym:恭喜!我很高兴至少能指出正确的方向。如果您愿意,可以通过投票支持答案来表达感激之情。 :) - Vit Khudenko

0

如果您需要访问该文件,我相信可能需要身份验证头。这个线程可以帮助您如何在Android中进行基于表单的身份验证:Android - 基于表单的身份验证


不,这不是基本的HTTP身份验证。 - incognym

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接