700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > HttpClient 模拟登录手机版新浪微博

HttpClient 模拟登录手机版新浪微博

时间:2021-04-12 11:11:13

相关推荐

HttpClient 模拟登录手机版新浪微博

手机版微博单点登录的URL为:/prog/wapsite/sso/login.php

我们先来看一下这个网页源代码:

<html><head></head><body><wml> <card title="手机新浪网-新浪通行证"> <p> 登录|<a href="register.php?backURL=http%3A%2F%&backTitle=%CA%D6%BB%FA%D0%C2%C0%CB%CD%F8&vt=1">注册</a>|<a href="resetpwd.php?backURL=http%3A%2F%&backTitle=%CA%D6%BB%FA%D0%C2%C0%CB%CD%F8&vt=1">忘记密码</a><br /> 手机号/电子邮箱/会员帐号:<br /><input type="text" name="mobile" size="11" value="" /> <br /> 密码:(<a href="login.php?backURL=http%3A%2F%&backTitle=%CA%D6%BB%FA%D0%C2%C0%CB%CD%F8&vt=1&pt=1">使用明文密码</a>)<br /> <input type="password" name="password" size="10" value="" /><br /> 记住登录状态,需支持并打开手机的cookie功能。<br /> <select name="remember"> <option value="on">是</option> <option value="off">否</option> </select><br /> <anchor>登录 <go href="login_submit.php?rand=1554212401&backURL=http%3A%2F%&backTitle=%CA%D6%BB%FA%D0%C2%C0%CB%CD%F8&vt=1" accept-charset="UTF-8" method="post"> <postfield name="mobile" value="$(mobile)" /> <postfield name="password_2199" value="$(password)" /> <postfield name="vk" value="2199_6637_1567626412" /> <postfield name="remember" value="$(remember)" /> <postfield name="backURL" value="http%3A%2F%" /> <postfield name="backTitle" value="手机新浪网" /> <postfield name="submit" value="1" /> </go> </anchor> </card> </wml></body></html>

我们要做的就是获取服务器需要的数据,然后用HttpClient模拟浏览器提交。

有几点需要说明一下:

go标签内的href是我们第二次请求的地址,通过这个地址来获取cookie。

用户密码那个field的name属性是随机变化的,需要先获取它然后提交。

下面是整个源代码。

思路:先获取表单的值,然后用POST方法提交。注意添加RequestHeader信息,否则会被服务器拒绝(403)。

/*** 获取手机版微博的cookies* @param username* 微博用户名* @param password* 微博密码* @return Cookie[]*/public Cookie[] getMCookies(String username, String password){Cookie[] cookies = null;HttpClient client;PostMethod post = null;try{Document doc = Jsoup.connect("/prog/wapsite/sso/login.php").get();Elements elements = doc.getElementsByTag("postfield");String randUrl = doc.getElementsByTag("go").first().attr("href"); String pwName = elements.get(1).attr("name");String vkValue = elements.get(2).attr("value");String backURL = elements.get(4).attr("value");String backTitle = elements.get(5).attr("value");String url = "/prog/wapsite/sso/"+randUrl;post = new PostMethod(url);post.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1");post.setRequestHeader("Referer", "/");post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");post.setParameter("mobile", username);post.setParameter(pwName,password);post.setParameter("vk", vkValue);post.setParameter("remember", "on");post.setParameter("backURL", backURL);post.setParameter("backTitle", backTitle);post.setParameter("submit", "1"); client = new HttpClient(); client.executeMethod(post);cookies = client.getState().getCookies();}catch(IOException e){e.printStackTrace();}finally{post.abort();}return cookies; }

如果用户名密码正确的话,应该就可以获得cookie了。

接下来如果想要访问某些网页只需要带上cookie就行了。

由于新浪的网页可能会变化,所以不保证此方法一直能用,不过大体思路应该是不会变的。

下一篇介绍如何模拟登录Web版新浪微博。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。