• c# 模拟http post 带cookie


    下面的代码是自动向cnblogs中的小组发帖.........注意小组ID,主题ID,小组类型
    首先采用firebug分析到发帖时的post地址以及参数,其中在headers中包含了cookies,把cookies复制下来放到d:\cookie.txt中,以分号隔开(a=b;c=d;),这些cookie中包含有身份验证信息
    之后读取文件d:\data.txt,每1024个字节为一帖自动发送
     

    代码

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

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


    }
    }

  • 相关阅读:
    记账本微信小程序开发三
    记账本微信小程序开发二
    记账本微信小程序开发一
    一个Java系统测试
    河北省重大技术需求征集系统(5)
    河北省重大技术需求征集系统(4)
    河北省重大技术需求征集系统(3)
    河北省重大技术需求征集系统(2)
    《软件需求工程》阅读笔记02
    通过API操作HBase数据库
  • 原文地址:https://www.cnblogs.com/Alex80/p/4471145.html
Copyright © 2020-2023  润新知