用C#写个刷帖的工具 想问问需要什么技术 提供下思路(帮顶给分) 自己一点思路都没有 仅仅为了做出来好玩 绝对不会恶意灌水CSDN 希望大家给点建议 [解决办法]在不考虑cookie的情况下,用Browser控件实现起来非常得心应手。 就是用Browser可以完全模拟你的动作。[解决办法]
using System; using System.Collections.Generic;using System.Text;using System.Net;using System.IO;using System.Web;namespace ConsoleApplication3{ class Program { static void Main(string[] args) { CSDN cs = new CSDN(); if (cs.Login("qq578023708", "*************")) cs.Reply("390521782","帮你顶了,一定要给分哦!"); //390521782为帖子ID Console.ReadLine(); } } class CSDN { HttpWebRequest httpq = null; HttpWebResponse httpp = null; CookieCollection cc = null; string cook = null; /// <summary> /// 登陆 /// </summary> /// <param name="userName">用户名</param> /// <param name="pwd">密码</param> /// <returns>返回TRUE 成功 返回 FALSE 失败</returns> public bool Login(string userName, string pwd) { httpq =(HttpWebRequest) WebRequest.Create("https://passport.csdn.net/ajax/accounthandler.ashx?t=log&u="+userName+"&p="+pwd+"&remember=0&f=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390521782&rand=0.5834313757092409"); httpq.Accept = "*/*"; httpq.Referer = "https://passport.csdn.net/account/loginbox?callback=logined&hidethird=1&from=http%3a%2f%2fbbs.csdn.net%2ftopics%2f390521782"; httpq.CookieContainer = new CookieContainer(); httpp =(HttpWebResponse) httpq.GetResponse(); httpp.Cookies = cc; StreamReader sr = new StreamReader(httpp.GetResponseStream()); cook = httpp.Headers["set-cookie"]; string re = sr.ReadToEnd(); if (re.IndexOf(""status":true") != -1) return true; else return false; } /// <summary> /// 回帖 /// </summary> /// <param name="id">帖子ID</param> /// <param name="text">回帖内容</param> /// <returns></returns> public string Reply(string id,string text) { httpq = (HttpWebRequest)WebRequest.Create("http://bbs.csdn.net/topics/"+id+"?page=1"); httpq.Accept = "application/json, text/javascript, */*"; httpq.Referer = "http://bbs.csdn.net/topics/"+id+"?page=1"; StreamReader ssr = new StreamReader( httpq.GetResponse().GetResponseStream()); string RR = ssr.ReadToEnd(); int index1= RR.IndexOf("csrf-param"); int index2 = RR.IndexOf("content", index1); index2 += 9; index1 = RR.IndexOf(" ", index2)-1; string token= RR.Substring(index2, index1 - index2); httpq = (HttpWebRequest)WebRequest.Create("http://bbs.csdn.net/posts?topic_id="+id); httpq.Referer = "http://bbs.csdn.net/topics/" + id + "?page=1"; httpq.Accept = "application/json, text/javascript, */*"; foreach (Cookie co in cc) { httpq.CookieContainer.Add(co); } httpq.Method = "post"; httpq.ContentType = "application/x-www-form-urlencoded"; byte[] bytes = Encoding.UTF8.GetBytes("utf8=%E2%9C%93&authenticity_token="+HttpUtility.UrlEncode(token)+"&post%5Bbody%5D="+HttpUtility.UrlEncode(text)+"&commit=%E6%8F%90%E4%BA%A4%E5%9B%9E%E5%A4%8D"); httpq.ContentLength = bytes.Length; httpq.GetRequestStream().Write(bytes, 0, bytes.Length); httpp =(HttpWebResponse) httpq.GetResponse(); StreamReader sr = new StreamReader(httpp.GetResponseStream()); return sr.ReadToEnd(); } }}
using System.Collections.Generic;using System.Text;using System.Net;using System.IO;using System.Web;namespace ConsoleApplication3{ class Program { static void Main(string[] args) { CSDN cs = new CSDN(); if (cs.Login("qq578023708", "*************")) cs.Reply("390521782","帮你顶了,一定要给分哦!"); //390521782为帖子ID Console.ReadLine(); } } class CSDN { HttpWebRequest httpq = null; HttpWebResponse httpp = null; CookieCollection cc = null; string cook = null; /// <summary> /// 登陆 /// </summary> /// <param name="userName">用户名</param> /// <param name="pwd">密码</param> /// <returns>返回TRUE 成功 返回 FALSE 失败</returns> public bool Login(string userName, string pwd) { httpq =(HttpWebRequest) WebRequest.Create("https://passport.csdn.net/ajax/accounthandler.ashx?t=log&u="+userName+"&p="+pwd+"&remember=0&f=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390521782&rand=0.5834313757092409"); httpq.Accept = "*/*"; httpq.Referer = "https://passport.csdn.net/account/loginbox?callback=logined&hidethird=1&from=http%3a%2f%2fbbs.csdn.net%2ftopics%2f390521782"; httpq.CookieContainer = new CookieContainer(); httpp =(HttpWebResponse) httpq.GetResponse();
httpp.Cookies = cc; StreamReader sr = new StreamReader(httpp.GetResponseStream()); cook = httpp.Headers["set-cookie"]; string re = sr.ReadToEnd(); if (re.IndexOf(""status":true") != -1) return true; else return false; } /// <summary> /// 回帖 /// </summary> /// <param name="id">帖子ID</param> /// <param name="text">回帖内容</param> /// <returns></returns> public string Reply(string id,string text) { httpq = (HttpWebRequest)WebRequest.Create("http://bbs.csdn.net/topics/"+id+"?page=1"); httpq.Accept = "application/json, text/javascript, */*"; httpq.Referer = "http://bbs.csdn.net/topics/"+id+"?page=1"; StreamReader ssr = new StreamReader( httpq.GetResponse().GetResponseStream()); string RR = ssr.ReadToEnd(); int index1= RR.IndexOf("csrf-param"); int index2 = RR.IndexOf("content", index1); index2 += 9; index1 = RR.IndexOf(" ", index2)-1; string token= RR.Substring(index2, index1 - index2); httpq = (HttpWebRequest)WebRequest.Create("http://bbs.csdn.net/posts?topic_id="+id);
httpq.Referer = "http://bbs.csdn.net/topics/" + id + "?page=1"; httpq.Accept = "application/json, text/javascript, */*"; foreach (Cookie co in cc) { httpq.CookieContainer.Add(co); } httpq.Method = "post"; httpq.ContentType = "application/x-www-form-urlencoded"; byte[] bytes = Encoding.UTF8.GetBytes("utf8=%E2%9C%93&authenticity_token="+HttpUtility.UrlEncode(token)+"&post%5Bbody%5D="+HttpUtility.UrlEncode(text)+"&commit=%E6%8F%90%E4%BA%A4%E5%9B%9E%E5%A4%8D"); httpq.ContentLength = bytes.Length; httpq.GetRequestStream().Write(bytes, 0, bytes.Length); httpp =(HttpWebResponse) httpq.GetResponse(); StreamReader sr = new StreamReader(httpp.GetResponseStream()); return sr.ReadToEnd(); } }}