c# 模拟http post 带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();
        }


    }
}

 躲猫猫社团团长

posted @ 2010-07-21 12:58  与时俱进  阅读(942)  评论(0编辑  收藏  举报
友情链接:同里老宅院民居客栈