C#三种模拟自动登录和提交POST信息的实现方法

原创 2007年10月13日 13:35:00

       在实际编程过程中,我们经常会遇到验证身份、程序升级网络投票会员模拟登陆等需要,C#给我们提供了以下的实现方法:
       网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser、WebClient、HttpWebRequest这三个。以下就分别用这三种方法来实现:
       1、WebBrowser是个"迷你"浏览器,其特点是Post时不用关心Cookie、内置JS等问题
           WebBrowser是VS2005新提供的组件(其实就是封装了IE接口),实现POST功能一般在webBrowser的DocumentCompleted中分析HtmlDocument 来实现,代码如下:
           HtmlElement ClickBtn =null;
           if (e.Url.ToString().ToLower().IndexOf("xxx.htm") > 0)   //登陆页面
            { 

                HtmlDocument doc = webBrowser1.Document;
                for (int i = 0; i < doc.All.Count ; i++)
                {
                    if (doc.All[i].TagName.ToUpper().Equals("INPUT"))
                    {
                        switch (doc.All[i].Name)
                        {
                            case "userCtl": 
                                doc.All[i].InnerText = "user01";
                                break;
                            case "passCt1":
                                doc.All[i].InnerText = "mypass";
                                break; 
                            case "B1":
                                ClickBtn = doc.All[i]; //提交按钮
                                break;
                        }
                    }
                }
                ClickBtn.InvokeMember("Click");   //执行按扭操作 
            }
           2、WebClient封装了HTTP的一些类,操作简单,相较于webBrowser,特点是可以自设代理,缺点是对COOKIE的控制
              WebClient的运行全在后台,并且提供了异步操作的能力,这样很方便并发多个任务,然后等待结果的返回,再逐个处理。多任务异步调用的代码如下:
    private void StartLoop(int ProxyNum)
        {
           WebClient []  wcArray = new WebClient[ProxyNum];  //初始化
             for (int idArray = 0; idArray< ProxyNum;idArray++) {
                 wcArray[idArray] = new WebClient();
                wcArray[idArray].OpenReadCompleted += new OpenReadCompletedEventHandler(Pic_OpenReadCompleted2);
                wcArray[idArray].UploadDataCompleted += new UploadDataCompletedEventHandler(Pic_UploadDataCompleted2);
                try
                {
                    ......
                    wcArray[idArray].Proxy = new WebProxy(proxy[1], port); 
                    wcArray[idArray].OpenReadAsync(new Uri("/tp.asp?Id=129")); //打开WEB;
                    proxy = null;
                }
                catch
                {
                }
            }
        }

        private void Pic_OpenReadCompleted2(object sender, OpenReadCompletedEventArgs e)
        {
                if (e.Error == null)
                {
                            string textData = new StreamReader(e.Result, Encoding.Default).ReadToEnd();  //取返回信息
                             .....
                              String cookie = ((WebClient)sender).ResponseHeaders["Set-Cookie"]; 
                             ((WebClient)sender).Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                            ((WebClient)sender).Headers.Add("Accept-Language", "zh-cn");
                            ((WebClient)sender).Headers.Add("Cookie", cookie);

                            string postData = "......"
                            byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 转化成二进制数组
                           ((WebClient)sender).UploadDataAsync(new Uri("/tp.asp?Id=129"), "POST", byteArray);
                }
         }

 

        private void Pic_UploadDataCompleted2(object sender, UploadDataCompletedEventArgs e)
        {
                 if (e.Error == null)
                {

                    string returnMessage = Encoding.Default.GetString(e.Result);
                    ......
                }
       }

       3、HttpWebRequest较为低层,能实现的功能较多,Cookie操作也很简单

             private bool  PostWebRequest()       
             {
                   CookieContainer cc = new CookieContainer();
                    string pos tData = "user=" + strUser + "&pass=" + strPsd;
                    byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 转化 免费资源http://www.it55.com

                    HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(new Uri("/chk.asp"));
                    webRequest2.CookieContainer = cc;
                    webRequest2.Method = "POST";
                    webRequest2.ContentType = "application/x-www-form-urlencoded";
                    webRequest2.ContentLength = byteArray.Length;
                    Stream newStream = webRequest2.GetRequestStream(); 
                    // Send the data.
                    newStream.Write(byteArray, 0, byteArray.Length);    //写入参数
                    newStream.Close(); 

                    HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();
                    StreamReader sr2=new StreamReader(response2.GetResponseStream(), Encoding.Default);
                    string text2 =  sr2.ReadToEnd();
                  ......
        }

C#网页自动登录和提交POST信息的多种方法 -

  • 2011年09月03日 19:06
  • 50KB
  • 下载

C#几种模拟自动登录和提交POST信息的实现方法

正在实践编程进程中,人们常常会碰到考证身份、程序进级网络投票会员模仿登陆等须要,C#给人们提求了以下的完成方式:网页主动登录和提交POST疑作的中心便是剖析网页的流代码(HTML), 正在C#中,能...
  • angel20082008
  • angel20082008
  • 2014-06-02 11:49:47
  • 2226

Jsoup实现Iteye自动登录

本来是为找如何实现有js动态加载网页的表单自动填写和提交,发现httpclient貌似不行,于是换成Jsoup,好像也不行,这里是Jsoup实现静态网页自动提交表单的代码。 package gddx...
  • fjssharpsword
  • fjssharpsword
  • 2016-05-20 12:23:53
  • 2679

C#模拟web请求,使用post提交带有文件的数据表单

在C#中有HttpWebRequest类,可以很方便用来获取http请求,但是这个类对Post方式没有提供一个很方便的方法来获取数据。网上有很多人提供了解决方法,但都参差不齐,这里我把我使用的方法总结...
  • yue1183283159
  • yue1183283159
  • 2015-11-17 11:00:13
  • 3898

c#客户端使用 http form的post方法提交图片

封装的类(来源于codeproject): using System; using System.Collections.Generic; using System.Linq; using ...
  • wangjijun0807
  • wangjijun0807
  • 2014-10-13 21:53:46
  • 1257

HttpWebRequest自动登录网站并获取网站内容

本文摘要:Sniffer(百度搜索) 来捕捉提交的数据信息: 1. 访问你需要站外提交的页面,比如 CSDN 登陆页 http://www.csdn.net/member/UserLogin.aspx...
  • snlei
  • snlei
  • 2008-02-23 17:52:00
  • 3889

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定: 要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数, 这个参数是由应用程序自行产生,它会用...
  • xxj_jing
  • xxj_jing
  • 2015-12-08 16:54:41
  • 15427

C_(WINFORM)实现模拟POST发送请求登录网站

  • 2015年04月26日 19:28
  • 66KB
  • 下载

C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)

其原理是,利用winfrom模拟表单提交数据,将要提交的参数提交给网页,网页执行代码,得到数据,然后Winform程序将网页的所有源代码读取下来,这样就达到windows应用程序和web应用程序之间传...
  • u013948190
  • u013948190
  • 2015-07-08 14:41:37
  • 2964

C#模拟form表单提交数据,上传文件

一般form的数据提交
  • sh2015yao
  • sh2015yao
  • 2014-09-16 14:52:23
  • 2985
收藏助手
不良信息举报
您举报文章:C#三种模拟自动登录和提交POST信息的实现方法
举报原因:
原因补充:

(最多只允许输入30个字)