• WebClient模拟网页提交表单


        最近学习Asp.net开发,迷上了Http的传输,小试牛刀!

    1、Web页面:

      很简单的一个页面,功能填入一些数据,保存到服务器C盘的一个文件,效果图:

    前台:

    View Code
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Nankang.Test.Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>保存</title>
    </head>
    <body>
        <form id="form1" runat="server" enableviewstate="False">
        <div>
            <asp:TextBox ID="m_TextBox" runat="server" Height="111px" Width="291px"></asp:TextBox>
            <br />
            <asp:Button ID="m_Button" runat="server" Text="保存" onclick="m_Button_Click" />
            <asp:Label ID="m_Label" runat="server" Text="..."></asp:Label>
            <br />
        </div>
        </form>
    </body>
    </html>

    后台:

    View Code
       protected void m_Button_Click(object sender, EventArgs e)
            {
                StreamWriter sw = null;
                try
                {
                    string dir = @"C:\Test\";
                    if (Directory.Exists(dir) == false)
                    {
                        Directory.CreateDirectory(dir);
                    }
    
                    string path = dir + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
                    FileStream fs = new FileStream(path, FileMode.Create);
                    sw = new StreamWriter(fs);
                    sw.WriteLine(this.m_TextBox.Text);
                    this.m_Label.Text += "保存成功!";
                }
                catch (Exception ex)
                {
                    this.m_Label.Text = ex.Message;
                }
                finally
                {
                    if (sw != null)
                    {
                        sw.Close();
                    }
                }
            }

    2、在WinForm中,用WebClient,调用Post方法,发送数据

    页面效果图:

    后台关键代码:

    View Code
     WebClient webClient = new WebClient();
                byte[] responseData = webClient.DownloadData(uriString);
                string srcString = Encoding.UTF8.GetString(responseData);
    
                webClient = new WebClient();
                webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 
    
                //VeiwState        
                string viewStateFlag = "id=\"__VIEWSTATE\" value=\""; 
                int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length;
                int j = srcString.IndexOf("\"", i);
                string viewState = srcString.Substring(i, j - i);
                //EventValidation
                string eventValidationFlag = "id=\"__EVENTVALIDATION\" value=\"";
                i = srcString.IndexOf(eventValidationFlag) + eventValidationFlag.Length;
                j = srcString.IndexOf("\"", i);
                string eventValidation = srcString.Substring(i, j - i);
                //获取页面的章数 
                string viewmenuid = "<input name=\"txt_menuid\" type=\"text\" value=\"";
                i = srcString.IndexOf(viewmenuid) + viewmenuid.Length;
                j = srcString.IndexOf("\"", i);
                string txt_menuid = srcString.Substring(i, j - i);
                //提交按钮的文本 
                string submitButton = "保存"; 
    
                bookTitle = System.Web.HttpUtility.UrlEncode(bookTitle);
                viewState = System.Web.HttpUtility.UrlEncode(viewState);
                eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
                txt_menuid = System.Web.HttpUtility.UrlEncode(txt_menuid);
                submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
                string postString = "__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation + "&m_TextBox=" + bookTitle + "&m_Button=" + submitButton;
                
                // 将字符串转换成字节数组 
                byte[] postData = Encoding.ASCII.GetBytes(postString);
                responseData = webClient.UploadData(uriString, "POST", postData);
             
                srcString = Encoding.UTF8.GetString(responseData);
    
                MessageBox.Show("保存成功!");


    3、Code

    源码下载

    仅供参考,谢谢。

  • 相关阅读:
    apk反编译
    Eclipse Android项目中如如第三方library文件
    layout_gravity属性和gravity属性区别(转载)
    android weight 属性正解(转载)
    010_01Servlet Request&Response
    009_02sendRedirect() forward() include()
    009_01Servlet基础简介
    008_02HTTP基础知识
    008_01WEB基础知识
    【实用】让代码变的更加简洁
  • 原文地址:https://www.cnblogs.com/sshoub/p/2862512.html
Copyright © 2020-2023  润新知