WEB开发网
开发学院软件开发C语言 c# 模拟http post 带cookie 阅读

c# 模拟http post 带cookie

 2010-09-30 22:44:04 来源:WEB开发网   
核心提示:下面的代码是自动向cnblogs中的小组发帖.........注意小组ID,主题ID,小组类型首先采用 firebug分析到发帖时的post地址以及参数,其中在headers中包含了cookies,把cookies复制下来放到 d:\\cookie.txt中,以分号隔开(a=b;c=d;),这些cookie中包含有身份

下面的代码是自动向cnblogs中的小组发帖.........注意小组ID,主题ID,小组类型

首先采用 firebug分析到发帖时的post地址以及参数,其中在headers中包含了cookies,把cookies复制下来放到 d:\\cookie.txt中,以分号隔开(a=b;c=d;),这些cookie中包含有身份验证信息

之后读取文件d:\\data.txt,每1024个字节为一帖自动发送

代码

using System;
using System.Collections.Generic;
using System.Web;
using System.Xml;
using System.IO;
using System.Text;
using System.Collections;
using System.Net;
using System.Threading;
namespace Haier1
{
    class Program
    {
            public static Hashtable getCookieMap()
        {
            string sPath = "d:\\cookie.txt";
            Hashtable maps = new Hashtable();
            FileStream fs = new FileStream(sPath, FileMode.Open);
            StreamReader rf = new StreamReader(fs, System.Text.Encoding.GetEncoding("gb2312"));
            string hm = "";
            try
            {
                do
                {
                    hm = rf.ReadLine();

                } while (!rf.EndOfStream);
                Console.WriteLine(hm);
                String[] s1 = hm.Split(';');
                // Console.Write(s1.Length);
                for (int i = 0; i < s1.Length; i++)
                {
                    int pos = s1[i].IndexOf('=');
                    String value = s1[i].Substring(pos + 1);
                    String name = s1[i].Substring(0, pos);
                    name = name.Trim();
                    //Console.WriteLine(name + ":" +value);
                    maps.Add(name, value);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("读取文件错误:" + e.Message);
                return null;
            }
            fs.Close();
            rf.Close();
            return maps;
        }
        public static bool test(string str, Hashtable maps)
        {
            bool ok = false;
            string content = "{\"threadId\": \"39369\", \"groupId\": \"101419\", \"groupType\": \"3\", \"title\": \"code\", \"content\": \"" + str + "\"}";
            //Console.WriteLine(content);
            string url = "http://home.cnblogs.com/WebService/GroupService.asmx/AddThreadComment";
            string host = "http://home.cnblogs.com";
            try
            {
                byte[] bs = Encoding.ASCII.GetBytes(content);
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
                req.Method = "POST";
                req.ContentType = "application/json;charset=utf-8";
                req.ContentLength = bs.Length;
                CookieContainer cc = new CookieContainer();
             
                cc.Add(new Uri(host), new Cookie("cnzz_a1708446", maps["cnzz_a1708446"].ToString()));
                cc.Add(new Uri(host), new Cookie("ASP.NET_SessionId", maps["ASP.NET_SessionId"].ToString()));
                cc.Add(new Uri(host), new Cookie(".DottextCookie", maps[".DottextCookie"].ToString()));
                req.CookieContainer = cc;
                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                  
                }
                StringBuilder sb = new StringBuilder("");
                using (WebResponse wr = req.GetResponse())
                {
                    System.IO.Stream respStream = wr.GetResponseStream();
                    System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));
                   // int h = 0;
                    string t = "";
                    do
                    {
                        t = reader.ReadLine();
                        // 这个地方自己搞定吧,简单地写了一下成功与否
                        ok = true;
                    } while (!reader.EndOfStream);
                }
                return ok;
            }
            catch (Exception ex)
            {
                Console.WriteLine("异常在getPostRespone:" + ex.Source + ":" + ex.Message);
                return ok;
            }
        }
  
        static void Main(string[] args)
        {
        
            int maxByte=1024;
            bool isDebug=false;
            if(args.Length>=2){
               
                maxByte = Int32.Parse(args[0]);
                if (args[1] == "debug")
                    isDebug = true;
            }
            
   
            Hashtable maps = getCookieMap();
            try
            {
                string sPath = "d:\\data.txt";
                FileStream fs = new FileStream(sPath, FileMode.Open);
                StreamReader rf = new StreamReader(fs, System.Text.Encoding.GetEncoding("gb2312"));
                string postStr = "";
                string temp;
                try
                {
                        int i = 0;
                        do
                        {
                            temp = rf.ReadLine();
                           
                           
                             postStr += temp;
                           
                            }
                         while (!rf.EndOfStream);
                        int len = postStr.Length;
                       
                    for(i=0;i<len/maxByte+1;i++)
                    {
                        if (i * maxByte + maxByte >= len)
                        { 
                            //Console.WriteLine(postStr.Substring(i * maxByte, len - i * maxByte));
                            if(test(i+":"+postStr.Substring(i * maxByte, len - i * maxByte),maps))
                            Console.WriteLine("post ok:"+i);
                            if (isDebug) Console.ReadLine();
                        }
                        else { 
                            //Console.WriteLine(postStr.Substring(i * maxByte, maxByte)); 
                            if(test(i+":"+postStr.Substring(i * maxByte, maxByte),maps)){
                                Console.WriteLine("post ok:"+i);
                                if (isDebug) Console.ReadLine();
                            }
                        
                        }
                    }
                    
                }
                catch (Exception e)
                {
                    Console.WriteLine("读取文件错误:" + e.Message);
                    return;
                }
 
 

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + "----" + ex.Source);
            }

            Console.WriteLine("over!");
            Console.ReadLine();
        }

    }
}

1 2  下一页

Tags:模拟 http post

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接