• 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();
            }


        }
    }
  • 相关阅读:
    iOS开发_WKWebView
    蒲公英获取UDID和下载App使用指南
    UIScrollView 遇到了AutoLayout之后其contentSize 的计算
    资料 和 快捷操作
    ME01 创建货源清单
    ME51N 创建采购申请
    LT01 创建转储单
    MM01 物料主数据批导
    PS 创建网络去掉反冲增强
    BP 供应商创建与修改
  • 原文地址:https://www.cnblogs.com/yangyh/p/1781845.html
Copyright © 2020-2023  润新知