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)
    ----
  • 相关阅读:
    阿里fastjson工具类
    poi导出excel2007版本
    java 利用poi 实现excel合并单元格后出现边框有的消失的解决方法
    spring整合atomikos实现分布式事务
    彻底理解ThreadLocal
    kubernetes架构和组件
    Promethues实战-简易教程系列
    Celery
    对称加密,非对称加密,证书机制
    Git diff
  • 原文地址:https://www.cnblogs.com/speeding/p/1803274.html
Copyright © 2011-2022 走看看