HttpClient模拟浏览器登录后发起请求(携带Cookie发请求)以及网页显示的事件过程
2015-07-19 21:30
597 查看
浏览器的工作:
这是最近写的一个模拟登录微博手机版的小程序
[code] 1请求一个需要登录的页面或资源 2服务器判断当前的会话是否包含已登录信息。如果没有登录重定向到登录页面 3手工在登录页面录入正确的账户信息并提交 4服务器判断登录信息是否正确,如果正确则将登录成功信息保存到session中 5登录成功后服务器端给浏览器返回会话的SessionID信息保存到客户端的Cookie中 6浏览器自动跳转到之前的请求地址并携带之前的Cookie(包含登录成功的SessionID) 7服务器端判断session中是否有成功登录信息,如果有则将请求的资源反馈给浏览器
出现再屏幕上的每个网页所发生的事件:
[code] 1.直接在浏览器上输入一个URL,也可以单击页面上的某个链接来获取一个网页,URL包含获取互联网上目标文件所需的一切信息. 2.自己的浏览器向以URL命名的服务器发送一个HTTP请求,以获取某个特定的文件.如果URL指定的是一个目录(而不是一个文件),就是在请求获取目录中的默认文件. 3.服务器寻找被请求的文件,并发送一个HTTP的反馈 a>如果找不到页面,服务器就会返回错误消息,这些消息通常是"404 Not Found",当然还有很多其他的错误消息. b>如果找到文件,服务器就会取得请求的文件,并且把它返回给浏览器. 4.浏览器解析HTML文件,如果页面包含图片,(使用HTML的img元素)或者其他外部的紫原如脚本,浏览器就会与服务器再次通信,以获取标记指定的图片. 5.浏览器在每个img元素指定位置插入图片,然后整个网页就整合好了.
这是最近写的一个模拟登录微博手机版的小程序
[code]package loginweibo; import com.sun.xml.internal.bind.v2.runtime.reflect.opt.Const; import org.apache.http.Consts; import org.apache.http.HttpResponse; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import sun.rmi.runtime.Log; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by pl on 15-7-19. */ public class weibo { public static void main(String[] args) throws NullPointerException{ //登录页面的URL String Loginurl ="http://login.weibo.cn/login/"; String firstpage = "http://weibo.cn/?vt=4"; //微博首页的网址 String loginnum = "18829289882"; String loginpwd = "pl19710504"; CloseableHttpClient httpclient = HttpClients.createDefault(); //建立客户端的链接 HttpGet httpget = new HttpGet(Loginurl); try{ CloseableHttpResponse response = httpclient.execute(httpget); String responhtml = null; try { responhtml = EntityUtils.toString(response.getEntity()); //System.out.println(responhtml); } catch (IOException e1) { e1.printStackTrace(); } //将vk的值截出来,split将整个的html分为两个部分,截取下面的部分 String vk = responhtml.split("<input type=\"hidden\" name=\"vk\" value=\"")[1].split("\" /><input")[0]; System.out.println(vk); String pass = vk.split("_")[0]; String finalpass = "password_"+pass; System.out.println(finalpass); response.close(); List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>(); pairs.add(new BasicNameValuePair("mobile",loginnum)); pairs.add(new BasicNameValuePair(finalpass,"pl19710504")); pairs.add(new BasicNameValuePair("remember","on")); pairs.add(new BasicNameValuePair("vk",vk)); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, Consts.UTF_8); //返回的实体 HttpPost httppost = new HttpPost(Loginurl); httppost.setEntity(entity); //检测以下响应状态是否正确 CloseableHttpResponse response2 = httpclient.execute(httppost); System.out.println(response2.getStatusLine().toString()); httpclient.execute(httppost); //登录操作 System.out.println("success"); HttpGet getinfo= new HttpGet("http://m.weibo.cn/p/100803?vt=4"); CloseableHttpResponse res; res = httpclient.execute(getinfo); System.out.println("进入热门话题的页面:"); //输出该页面的html文件 System.out.println(EntityUtils.toString(res.getEntity())); res.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } } }
相关文章推荐
- 网络基础知识
- HttpHandler简介
- 深度学习之卷积神经网络
- 如何监控第三方应用程序(SOAP or RESTful client)访问HTTPS当数据站点?
- android网络通信------UDP
- 计蒜之道 初赛 第一场 题解 dp 高效 网络流 最小割 最大流 ISAP 模板
- 网络编程 CAsyncSocket类的应用实例 聊天程序 客户端代码
- android网络通信————Scoket
- https原理:证书传递、验证和数据加密、解密过程解析
- https原理:证书传递、验证和数据加密、解密过程解析
- hdu 4035 可能性DP 成都网络游戏
- Linux网络基础设施配置
- 天下武功尽出LAMP之http篇(2)
- HTTP Status 500 - Error instantiating servlet class test.Test
- 云计算和大数据时代网络技术揭秘(十)虚拟化网卡
- LightOJ 1153 (网络流最大流 sap)
- poj 1149 PIGS (网络流最大流Dinic)
- hdu 3549 Flow Problem ek算法,网络流
- 使用HttpClient访问网络
- HTTP返回状态码说明