服务器端javascript检查失败自动窗体登录

时间:2012-03-06 00:27:32

标签: javascript android forms login

开发我的第一个Android应用程序我认为我遇到了一些障碍。

我的应用程序旨在自动登录网站并在网站上查询某些搜索字词并在屏幕上显示结果。我特别不想使用浏览器,因为我喜欢摆脱网站的大部分开销(图片,广告等)。

使用HttpURLConnection对网站进行基于表单的登录我停留在服务器确认登录的位置,但随后检查浏览器的javascript和cookie功能并停止登录。服务器回来时有一个整齐的页面,上面写着“嘿,感谢登录,但你需要启用javascript和cookies,再见”,所以它不是HTTP或连接错误左右。

相关代码:

        InputStream myInputStream =null;
        StringBuilder sb = new StringBuilder();

        // prepare login fields
        sb.append("username=");    
        sb.append(username);           
        sb.append("&password=");   
        sb.append(password);

        myurl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) myurl.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

        // add the POST form fields to the request
        wr.write(sb.toString());
        wr.flush();
        myInputStream = conn.getInputStream();
        wr.close();

我能够使用Lynx(基于控制台的Linux浏览器,也没有javascript)触发相同的服务器行为,这给了我相同的页面,说我不能使用该网站,除非我在浏览器中启用了javascript。

理想情况下,我只是想欺骗服务器并让它知道我有javascript功能,但我不知道这是否可以使用我当前的方法。

如果这不起作用,我的替代方案是什么?我是否必须使用类似WebViewClient的东西?如上所述,我不需要浏览器gui,只是一种从html中提取数据并在我的应用程序中使用它做一些事情的方法。

提前致谢!

1 个答案:

答案 0 :(得分:0)

网络服务器可能正在检查您的User-agent标头,并与支持的浏览器的白名单进行比较。在发送请求之前尝试执行此操作:

conn.setRequestProperty(
    "User-agent", 
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11");