现在我要在自己的系统中登陆到 另一个站点的博客, 然后发表文章.
现在实现了 登陆, 发文章是根据httpwatch 获得的地址和cookie,再post 过去的,如果是直接用监视到的cookie(header项里的值) 是可以实现发帖的
但这样 把一些内容就写死了, 如果有点变动,或者改个用户就不能用了, 我就先访问博客的主页, 获取cookie ,同样用httpwatch 可以看到有cookie项里有多个cookie ,但是通过下面的方法获取的就少几个,
HttpWebRequest req1 = WebRequest.Create(url) as HttpWebRequest;
CookieContainer mi =cookie;//通过登陆获取的
req1.Method = "GET";
WebResponse wp1 = req1.GetResponse();
Stream st1 = wp1.GetResponseStream();
StreamReader sr1 = new StreamReader(st1);
string aa1 = sr1.ReadToEnd();
CookieCollection cookieheader1 = req1.CookieContainer.GetCookies(req1.RequestUri);
这样获取的cookieheader1 比监视到的要少几个 ,不知道是怎么回事,
我想如果这里的cookie 获取对了,替换写死的的cookie 就应该可以了
弄了一天了,也搜索了不少, 还是没解决.
CookieContainer cookies = new CookieContainer();
每次请求时设置req.CookieContainer = cookies;
这样登陆之后的Cookies会保存到CookieContainer里
在下一次请求时也设置req.CookieContainer = cookies;
会自动将登录返回的cookies放到这次请求的Cookies里面。
CookieCollection cookieheader1 = req1.CookieContainer.GetCookies(req1.RequestUri);
这一句有问题吧?好像就是获取写入的的内容啊,应该从wp1对象下手啊,注意http协议的话你会发现webrespose在cookie不变的时候是没用cookies的,更改的时候可以通过Set-Cookie字段的到更改的cookie:
wp1.Headers["Set-Cookie"];
再自己与之前的cookie综合既可以得到~~~
http://www.cnblogs.com/lulu/archive/2009/11/07/1597971.html
这个对你应该有所帮助:)
从第一次请求开始CookieContainer cookies 需要保存起来。
每次请求都需要
req.CookieContainer = cookies;
好像你少了这些:
Req.Proxy = null;
Req.UseDefaultCredentials = true;
参考http://blogs.msdn.com/dgorti/archive/2005/08/16/452347.aspx
这个建议你使用HttpWatch监视下,程序中那几个cookie是需要使用到的,然后在写代码时针对这几个cookie进行存储。程序中并是所有的cookie都需要使用到的。