校内网博客发布

原文下载:http://www.ziddu.com/download/3923096/3.doc.html

问题描述:

自动登录校内网,并发布博客文章。

难点:

HTTP是无状态协议,如何在多个HTTP请求之间进行状态保持?

说明:

本次实验是在前两次实验的基础之上,假定同学们已经能够用代码实现前两次实验的功能(访问页面和发送数据)。这次实验比前两次实验的所增加的知识点在于状态保持,也就是,登录后,如何保持Cookie和Session,从而发布文章时,让服务器以为你是已登录用户。

具体实现:

1.首先进行抓包分析。需要分析两次HTTP包,即登录包和发布文章包。

(1)打开校内网,找到登录页面进行登录,并抓包分析。

http://login.xiaonei.com/Login.do

(2)找到发表博客的页面,发布一篇新的日志,并抓包分析。

http://blog.xiaonei.com/NewEntry.do

通过理论课所讲知识可知,服务器端利用Session实现状态保持,而这个Session是通过存在浏览器端的一个Cookie进行识别的,在抓包时可以注意这个Cookie。

2.用代码实现

编码格式:UTF-8

代码实现的两个任务是:一是发一个登录的包,并保存服务器端返回的Cookie。二是再发送一个发布文章的包,同时注意把上一步保存的Cookie也发送出去。

关键代码:

Java版

片断1

HttpClient client=new HttpClient();

PostMethod post=new UTF8PostMethod("http://login.xiaonei.com/Login.do");

post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//下面这条代码可以实现自动保存Cookie

client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);

片断2

post.setRequestBody(data);   //设置要发送的数据(登录信息)

client.executeMethod(post);   //发送登录请求


C#版

片断1

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://login.xiaonei.com/Login.do");

request.Method="POST";

request.Cookies=new CookieContainer();

片断2

request.ContentLength = data.Length;

request.ContentType = "application/x-www-form-urlencoded";           

request.GetRequestStream().Write(data, 0, data.Length);   //设置要发送的数据(登录信息)

片断3

CookieContainer cookies = request.CookieContainer; //保存Cookie

片断4

//下面这些代码生成一个新的POST请求(发布文章),并设置其Cookie为在上一步所保存的Cookie

request = (HttpWebRequest)WebRequest.Create("http://blog.xiaonei.com/NewEntry.do");

request.CookieContainer = cookies;

你可能感兴趣的:(html,浏览器,Blog)