我不得不使用好几个系统 都是B/S结构的 每次登录都需要输入用户名和密码 觉得非常麻烦 考虑到其他同事也会有这样的需求 不妨就写个自动登录的程序吧 之前 也考虑过使用单点登录 几经尝试之后还是放弃了
我习惯使用Java 本能地开始寻找Java的解决方法 在Google中输入 Java自动登录 Java网页模拟登录 Java Post 登录 结果倒是不少 内容也差不多 我尝试很多次终究也没有达到我预期的目标 后来 我都不知道这些代码应该在jsp页面中执行还是在c/s结构的程序中执行 但这些代码确实管用
我们先分析一下代码
<%@ pageimport= java util * %>
<%@ pageimport= java io * %>
<%@ pageimport= * %>
String surl =
URL url = newURL(surl)
URLConnection conn= url openConnection()
conn setDoOutput(true)
OutputStreamWriterout=new OutputStreamWriter(conn getOutputStream())
String str = username=yourname&password=
out write(str)
out flush()
out close()
到这里 如果在C/S结构中 且参数正确 程序能够成功登录到这个oa系统 要看到结果 你可以通过下面的代码将系统服务器返回的结果System out println()出来
String sling =
String scontent =
BufferedReader in = new BufferedReader(newInputStreamReader(conn getInputStream() UTF ))
while ((sling = in readLine())!= null)
scontent += in + \r\n
System out println(scontent)
在C/S结构下 可以到得到控制台输出了返回值 从返回内容里可以看出程序已经成功登录 但要是把这个网址浏览器打开 还是得重新登录 问题没有得到根本解决 如果只是恶意注册 到这里应该就达到目的了
看样子C/S结构下不容易实现网页程序自动登录 除非你在C/S程序中内嵌一个浏览器 直接在这个浏览器中自动访问系统 应该没有别的方法 主要问题在于我们没有办法共享Session
为了便于共享Session 我们只能在浏览器中实现网页自动登录 通过上面的代码在jsp页面中测试 达不到预期目标
网页自动登录 就是希望程序自动填充用户名和密码 然后以Post方式提交给登录页面的Form所指向的action页面或方法 我将系统的登录页面的源代码保存成一个网页 然后在username和password文本框中设置默认值 然后通过这网页登录系统 测试后 发现可行 接下来 你可能已经想到了解决方法
我们可以通过url openConnection()建立连接 将返回的scontent打印出来 然后接着打印以下代码
out println( <scripttype=\ text/javascript\ >\r\n )
out println( document getElementsByName(\ username\ )[ ] value=yourname\r\n )
out println( document getElementsByName(\ password\ )[ ] value= \r\n )
out println( document forms[ ] submit() \r\n )
out println( </script>\r\n )
原理很简单 通过login jsp将登录页面的全部源代码写在当前页面 然后使用javascript脚本将用户名和密码的值填充上 最后提交表单 这样中 终于实现了自动登录的目标 现在我通过一个特殊的网址 例如?url=fc cd bbc e f affd de e d c b f ff ec f ff d c ef c b ac 就可以自动访问这个oa了
lishixinzhi/Article/program/Java/hx/201311/26922我不得不使用好几个系统 都是B/S结构的 每次登录都需要输入用户名和密码 觉得非常麻烦 考虑到其他同事也会有这样的需求 不妨就写个自动登录的程序吧 之前 也考虑过使用单点登录 几经尝试之后还是放弃了 我习惯使用Java 本能地开始寻找Java的解决方法 在Google中输入 Java自动登录 Java网页模拟登录 JavaPost登录 结果倒是不少 内容也差不多 我尝试很多次终究也没有达到我预期的目标 后来 我都不知道这些代码应该在jsp页面中执行还是在c/s结构的程序中执行 但这些代码确实管用 我们先分析一下代码 Stringsurl= URLurl=newURL(surl) URLConnectionconn=url openConnection() conn setDoOutput(true) OutputStreamWriterout=newOutputStreamWriter(conn getOutputStream()) Stringstr= username=yourname&password= out write(str) out flush() out close() 到这里 如果在C/S结构中 且参数正确 程序能够成功登录到这个oa系统 要看到结果 你可以通过下面的代码将系统服务器返回的结果System out println()出来 Stringsling= Stringscontent= BufferedReaderin=newBufferedReader(newInputStreamReader(conn getInputStream() UTF )) while((sling=in readLine())!=null) scontent+=in+ \r\n System out println(scontent) 在C/S结构下 可以到得到控制台输出了返回值 从返回内容里可以看出程序已经成功登录 但要是把这个网址浏览器打开 还是得重新登录 问题没有得到根本解决 如果只是恶意注册 到这里应该就达到目的了 看样子C/S结构下不容易实现网页程序自动登录 除非你在C/S程序中内嵌一个浏览器 直接在这个浏览器中自动访问系统 应该没有别的方法 主要问题在于我们没有办法共享Session 为了便于共享Session 我们只能在浏览器中实现网页自动登录 通过上面的代码在jsp页面中测试 达不到预期目标 网页自动登录 就是希望程序自动填充用户名和密码 然后以Post方式提交给登录页面的Form所指向的action页面或方法 我将系统的登录页面的源代码保存成一个网页 然后在username和password文本框中设置默认值 然后通过这网页登录系统 测试后 发现可行 接下来 你可能已经想到了解决方法 我们可以通过url openConnection()建立连接 将返回的scontent打印出来 然后接着打印以下代码 out println( \r\n ) out println( document getElementsByName(\ username\ )[ ] value=yourname\r\n ) out println( document getElementsByName(\ password\ )[ ] value= \r\n ) out println( document forms[ ] submit() \r\n ) out println( \r\n ) 原理很简单 通过login jsp将登录页面的全部源代码写在当前页面 然后使用javascript脚本将用户名和密码的值填充上 最后提交表单 这样中 终于实现了自动登录的目标 现在我通过一个特殊的网址 就可以自动访问这个oa了 你可能注意到参数url 他的值是经过加密的 内容是用户名和密码 当然 你也可以加上有效期 即在有效期内这个链接才是有效的 才可以实现自动登录 lishixinzhi/Article/program/Java/hx/201311/26114
启动IE:
System.Diagnostics.Process.Start(@"C:\Program Files\Internet Explorer\IEXPLORE.EXE", url)
MessageBox:
MessageBox.Show()/MessageBox.ShowDialog()
读注册表:
Microsoft.Win32.RegistryKey localMachine = Registry.LocalMachine
Microsoft.Win32.RegistryKey Software = localMachine.OpenSubKey("SOFTWARE")
Microsoft.Win32.RegistryKey YourKey= Software.OpenSubKey("YourKey")//YourKey是你的程序名
假设下面有两个键,你可以用RegistryKey对象的GetValue方法可以得到键值,如
YourKey.GetValue("ShowMessageBox")
写注册表:
上面找到YourKey之后,可以使用YourKey.CreateSubKey(string)的方法创建新的键
上面的代码保留了命名空间,你实际写的时候可以 using 一下这些命名空间,就省去没次都写了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)