zoukankan      html  css  js  c++  java
  • C# 带Cookies发送请求

            #region --来自黄聪
            void F1()
            {
                #region --创建cookies容器 添加Cookies和对应的URl(Hots主)
                CookieContainer cc = new CookieContainer(); //创建Cookie容器对象 (Cookies集合)
                cc.Add(new System.Uri("http://localhost:19720/"), new Cookie("Mxx", "UserName=admin&Pwd=123456")); // "Mxx为cookie名"
                #endregion
                //调用方法 来请求网址
                string str = SendDataByPost("http://localhost:19720/Home/A1", "name=zhangsan&Pwd=123", ref cc);
    
                MessageBox.Show(str);
            }
            #region --同步通过POST方式发送数据
            /// <summary>
            /// 通过POST方式发送数据
            /// </summary>
            /// <param name="Url">url</param>
            /// <param name="postDataStr">Post数据</param>
            /// <param name="cookie">Cookie容器</param>
            /// <returns></returns>
            public string SendDataByPost(string Url, string postDataStr, ref CookieContainer cookie)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); //请求地址
    
                if (cookie.Count == 0)
                {
                    request.CookieContainer = new CookieContainer(); //创建新的cookie容器对象
                    cookie = request.CookieContainer;  //
                }
                else
                {
                    request.CookieContainer = cookie; //设置请求的ecookes
                }
    
                request.Method = "POST"; //请求方式
                request.ContentType = "application/x-www-form-urlencoded"; //请求的内容类型
                request.ContentLength = postDataStr.Length; //请求内容长度
    
                Stream myRequestStream = request.GetRequestStream(); //获取用于写入请求数据的流对象  【联网建立连接】
                
                //写入流
                StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); //使用GB2312编码写文件
                myStreamWriter.Write(postDataStr); //将字符串写入流中
                myStreamWriter.Close();  //关闭流写入对象
    
    
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();  //Response响应   //返回响应的资源
    
                //读取流
                Stream myResponseStream = response.GetResponseStream(); //获取流,该流用于读取来自服务器响应体
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); //使用UTF-8编码读取文件
                string retString = myStreamReader.ReadToEnd(); //读取流中的所有字符
                myStreamReader.Close(); //关闭读取流对象
    
                myResponseStream.Close(); //关闭当前流并释放与之关联的所有资源
    
                return retString;
            }
            #endregion
    
            #region --同步通过GET方式发送数据
            /// <summary>
            /// 通过GET方式发送数据
            /// </summary>
            /// <param name="Url">url</param>
            /// <param name="postDataStr">GET数据</param>
            /// <param name="cookie">GET容器</param>
            /// <returns></returns>
            public string SendDataByGET(string Url, string postDataStr, ref CookieContainer cookie)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
                if (cookie.Count == 0)
                {
                    request.CookieContainer = new CookieContainer();
                    cookie = request.CookieContainer;
                }
                else
                {
                    request.CookieContainer = cookie;
                }
    
                request.Method = "GET";
                request.ContentType = "text/html;charset=UTF-8";
    
                HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //Response响应   //返回响应的资源
    
                Stream myResponseStream = response.GetResponseStream(); //获取服务器返回的流
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));//使用utf-8编码读取文件
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
    
                return retString;
            }
            #endregion
    
            private void Test()
            {
                string url = "http://i.baidu.com/";
                string cookie = "PSINO=6;";
     
                CookieContainer cc = new CookieContainer(); //创建cookie 容器对象
                cc.SetCookies(new System.Uri(url), cookie); //将cookies指定的url
    
                string content = SendDataByGET(url, "", ref cc);
    
                Console.WriteLine(content);
                Console.ReadLine();
            }
            #endregion

     //-----------------------------

            #region  --哈希表的使用
            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")); //读取cookie文本
                string hm = "";
                try
                {
                    do
                    {
                        hm = rf.ReadLine();
    
                    } while (!rf.EndOfStream);//如果流当前流位置在结尾  结束循环
    
                    Console.WriteLine(hm);  //输出 这个cookes文本中的字符串
    
                    String[] s1 = hm.Split(';');  //cookies文本中的字符串以 ";"号 分割 返回字符串数组
                    // Console.Write(s1.Length);
                    for (int i = 0; i < s1.Length; i++)  //遍历这个字符串数组
                    {
                        int pos = s1[i].IndexOf('='); //查找到 字符 '=' 的位置
                        String value = s1[i].Substring(pos + 1);//从=号位置+1 开始截取到最后
                        String name = s1[i].Substring(0, pos); //从0开始截取到 = 号位置
                        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; //返回这个哈希表对象 
            }
    
            //C#中遍历Hashtable的4种方法
            static void testA()
            {
                Hashtable ht = new Hashtable();
                ht.Add("1", "1111");
                ht.Add("2", "2222");
                ht.Add("3", "3333");
                ht.Add("4", "4444");
    
                //遍历方法一:遍历哈希表中的键
                foreach (string key in ht.Keys)
                {
                    //Console.WriteLine(string.Format("{0}-{1}"), key, ht[key]);
                    Console.WriteLine(string.Format("{0}-{1}", key, ht[key]));
                }
                Console.WriteLine("**********************************************************");
                //遍历方法二:遍历哈希表中的值
                foreach (string value in ht.Values)
                {
                    Console.WriteLine(value);
                }
                Console.WriteLine("**********************************************************");
                //遍历方法三:遍历哈希表中的键值
                foreach (DictionaryEntry de in ht)
                {
                    Console.WriteLine(string.Format("{0}-{1}", de.Key, de.Value));
                }
                Console.WriteLine("**********************************************************");
                //遍历方法四:遍历哈希表中的键值
                IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
                bool flag = myEnumerator.MoveNext();
                while (flag)
                {
                    Console.WriteLine(myEnumerator.Key + "-" + myEnumerator.Value);
                    //  Console.WriteLine(ht[myEnumerator.Key]);//ht[myEnumerator.Key]== myEnumerator.Value=true;
                    flag = myEnumerator.MoveNext();
                }
                Console.Read();
            }
            #endregion
    
            //test(i + ":" + postStr.Substring(i * maxByte, maxByte), maps) //截取1024个字符
            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;
                    //cookies 容器
                    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; //设置这个连接cookie
    
                    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(); //读取cookies文件返回哈希表
    
                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);  //读取发送post请求的数据
                        int len = postStr.Length;  //字符串长度
    
                        for (i = 0; i < len / maxByte + 1; i++)    //长度/1025
                        {
                            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();
            }
  • 相关阅读:
    HTML中使用Vue+Dhtmlxgantt制作任务进度图
    Vue中使用js-xlsx导出Data数据到Excel
    Vue生命周期
    ajax调用免费的天气API
    maven无法自动下载依赖包settings.xml文件配置
    idea打开项目没有src目录
    java jdk idea maven安装及配置
    CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/pytorch
    The procedure entry point OPENSSL_sk_new_reserve could not be located in the dynamic link library
    Nuget打包没有注释显示
  • 原文地址:https://www.cnblogs.com/enych/p/8479622.html
Copyright © 2011-2022 走看看