zoukankan      html  css  js  c++  java
  • C#的HttpWebRequest编程,支持带ViewState的网页POST请求

    从网上找到了Jake LinJake's Blog on 博客园)的一篇文章《.NET Compact Framework下HttpWebRequest开发》,在他的代码基础上稍加修改,可以编程模拟网页POST提交的效果。

    在主程序上用了个循环,再将取出的网页用正则表达式把想要的信息取出来,最后成功地提取出了石油大学附中2010小升初的成绩表。

    static private string SearchURL(string id)
    {
    try
    {
        //Get the ViewState and EventValidation
        HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;
        request.Method
    ="GET";
        request.KeepAlive
    =false;

        //Get the response
        HttpWebResponse response = request.GetResponse() as HttpWebResponse;
        System.IO.Stream responseStream
    = response.GetResponseStream();
        System.IO.StreamReader reader
    =new System.IO.StreamReader(responseStream, Encoding.UTF8);
        string srcString = reader.ReadToEnd();

        //Get the ViewState
        string viewStateFlag ="id=\"__VIEWSTATE\" value=\"";
        int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length;
        int j = srcString.IndexOf("\"", i);
        string viewState = srcString.Substring(i, j - i);

        //Get the ViewState
        string EventValidationFlag ="id=\"__EVENTVALIDATION\" value=\"";
        i = srcString.IndexOf(EventValidationFlag) + EventValidationFlag.Length;
        j
    = srcString.IndexOf("\"", i);
        string eventValidation = srcString.Substring(i, j - i);

        //Compose the URL
        viewState = Uri.EscapeDataString(viewState);
        eventValidation
    = Uri.EscapeDataString(eventValidation);
        string strSearch = Uri.EscapeDataString("查询");

        string formatString ="__VIEWSTATE={0}&__EVENTVALIDATION={1}&TextBox1={2}&Button1={3}";
        string postString =string.Format(formatString, viewState, eventValidation, id,strSearch);

        //Change to byte[]
        byte[] postData = Encoding.ASCII.GetBytes(postString);

        //Compose the new request
        request = WebRequest.Create(URI) as HttpWebRequest;
        request.Method
    ="POST";
        request.KeepAlive
    =false;
        request.ContentType
    ="application/x-www-form-urlencoded";
        request.ContentLength
    = postData.Length;

        System.IO.Stream outputStream
    = request.GetRequestStream();
        outputStream.Write(postData,
    0, postData.Length);
        outputStream.Close();

        //Get the new response
        response = request.GetResponse() as HttpWebResponse;
        responseStream
    = response.GetResponseStream();
        reader
    =new System.IO.StreamReader(responseStream);
        srcString
    = reader.ReadToEnd();
        return srcString;
    }
    catch (WebException we)
    {
        Console.WriteLine(
    "Communication error,"+ we.Message +" please check your connectivity and try again.", "Error");
    }
    catch
    {
        Console.WriteLine(
    "Unknow error.", "Error");
    }
    return null;
    }
     


    ----==== Email: slofslb (GTD) qq.com 请将(GTD)换成@ ====----
    版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
    作者:申龙斌的程序人生

    ---- 魔方桥牌象棋、游戏人生...
    ---- BASIC、C++、JAVA、C#HaskellObjective-COpen Inventor、程序人生...
    ---- GTD伴我实现人生目标
    ---- 区块链生存训练
    ---- 用欧拉计划学Rust编程
    ---- 申龙斌的读书笔记(2011-2019)
    ----
  • 相关阅读:
    liunx 文件权限注意
    面试必备之乐观锁与悲观锁
    Hibernate之二级缓存
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)
    ThreadLocal-面试必问深度解析
    Java 8系列之重新认识HashMap(知乎精文)
    Collection接口和Collections类的简单区别和讲解
    细说mysql索引
    【Java面经】非科班渣硕面经
    关于group by的用法 原理(好文章啊,图文并茂,简单易懂)
  • 原文地址:https://www.cnblogs.com/speeding/p/1803274.html
Copyright © 2011-2022 走看看