• 如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证(续)


    昨天有网友在msn问我如果有几个页面,给第一个页面post信息以后session设定一个值然后进入第二个页面,第二个页面调整了session后进入第三个页面,这样的情况怎么做,我写了一个例子,不知道是不是符合你的要求,如果不符合请留言。

    static void Main(string[] args)
            {
                CookieContainer myCookieContainer
    =new CookieContainer(); 
                Console.WriteLine(PostData(
    "http://localhost/csdn/step1.asp","step1=step1",myCookieContainer));
                Console.WriteLine(PostData(
    "http://localhost/csdn/step2.asp","",myCookieContainer));
                Console.WriteLine(PostData(
    "http://localhost/csdn/step3.asp","",myCookieContainer));
            }

    写一个方法封装一下这个post的操作,第一个参数是地址,第二个参数是post的信息,第三个参数是CookieContainer,request的时候使用这个CookieContainer,在response的时候把CookieContainer赋值,因为本来CookieContainer就是引用类型的,所以可以不加ref或者out操作符。

            public static string PostData(string url,string indata,CookieContainer myCookieContainer)
            {
                
    string outdata=""
                HttpWebRequest myHttpWebRequest
    =(HttpWebRequest)WebRequest.Create(url); 
                myHttpWebRequest.ContentType
    ="application/x-www-form-urlencoded"
                myHttpWebRequest.ContentLength
    =indata.Length; 
                myHttpWebRequest.Method
    ="POST"
                myHttpWebRequest.CookieContainer
    =myCookieContainer; 
                Stream myRequestStream
    =myHttpWebRequest.GetRequestStream(); 
                StreamWriter myStreamWriter
    =new StreamWriter(myRequestStream,Encoding.GetEncoding("gb2312"));                 
                myStreamWriter.Write(indata); 
                myStreamWriter.Close(); 
                myRequestStream.Close(); 
                HttpWebResponse myHttpWebResponse
    =(HttpWebResponse)myHttpWebRequest.GetResponse(); 
                myHttpWebResponse.Cookies
    =myCookieContainer.GetCookies(myHttpWebRequest.RequestUri); 
                Stream myResponseStream
    =myHttpWebResponse.GetResponseStream(); 
                StreamReader myStreamReader
    =new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312")); 
                outdata
    =myStreamReader.ReadToEnd(); 
                myStreamReader.Close(); 
                myResponseStream.Close();
                
    return outdata;
            }    

    三个asp页面如下:

    step1.asp
    <%
    if request.ServerVariables("REQUEST_METHOD")="POST" then
    if request.Form("step1")="step1" then 
    session(
    "step")="1"
    response.Write("<script>alert('step1->ok');location.href='step2.asp';</script>")
    else
    response.Write(
    "<script>alert('step1->not ok');</script>")
    end if
    end if
    %>
    <form method="post">
    <input type="text" name="step1" value="step1">
    <input type="submit" value="post">
    </form>

    step2.asp
    <%
    if session("step")="1" then
    session(
    "step")="2"
    response.Write("<script>alert('step2->ok');location.href='step3.asp';</script>")
    else
    response.Write(
    "<script>alert('step2->not ok');</script>")
    end if
    %>

    step3.asp
    <%
    if session("step")="2" then 
    response.Write(
    "<script>alert('step3->ok');</script>")
    else
    response.Write(
    "<script>alert('step3->not ok');</script>")
    end if
    %>
    欢迎大家阅读我的极客时间专栏《Java业务开发常见错误100例》【全面避坑+最佳实践=健壮代码】
  • 相关阅读:
    就现在的几种代码管理库的比较
    就书籍“构造之法”的问题
    软件工程之中期学习总结
    软件项目管理之理解
    软件代码规范之理解
    介绍几个常用的代码管理工具
    关于构建之法的问题
    研究生竞赛系统需求规格说明书
    各种GIT代码托管工具比较
    第一个作业
  • 原文地址:https://www.cnblogs.com/lovecherry/p/176791.html
Copyright © 2020-2023  润新知