`
mlzboy
  • 浏览: 724837 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

模拟提交程序相关专题

阅读更多

目录

模拟提交程序相关专题    1

目录    2

1 目的    4

2 登录    4

2.1 WebBrowser    4

2.2 WebClient    4

2.3 HttpWebRequest    6

2.4 实例    6

3 注销    7

3.1 实例    7

4 判断是否登录成功    7

4.1 实例    8

5 保存用户名和密码    9

5.1 实例    9

 

1 目的

在此文档中,将介绍模拟提交程序相关的几个问题

2 登录

登录主要使用了自动登录和提交post的方法

2.1 WebBrowser

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.2 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("http://xxxx.com.cn/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("http://xxxxxxy.com.cn/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);

......

}

}

2.3 HttpWebRequest

private bool PostWebRequest()

{

CookieContainer cc = new CookieContainer();

string pos tData = "user=" + strUser + "&pass=" + strPsd;

byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 转化

 

HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(new Uri("http://www.xxxx.com/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();

......

}

2.4 实例

2.4.1 HttpWebRequest方法

string submitButton = "连接网络";

submitButton = System.Web.HttpUtility.UrlEncode(submitButto);

 

CookieContainer cc = new CookieContainer();

string postData = "DDDDD=" + this.txtuserName.Text + "&upass=" + this.txtpassword.Text + "&0MKKey" + submitButton; //+ "&0MKKey=%C1%AC%BD%D3%CD%F8%C2%E7";

byte[] byteArray = Encoding.Default.GetBytes(postData); // 转化

 

HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(new Uri("http://newlogin.bjut.edu.cn"));

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();

2.4.2 WebClient方法

要提交表单的URI字符串。

string uriString = "http://newlogin.bjut.edu.cn";

要提交的字符串数据。

string postString = "DDDDD=" + this.txtuserName.Text + "&upass=" + this.txtpassword.Text + "&0MKKey=" + submitButton;

初始化WebClient

WebClient webClient = new WebClient();

webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

将字符串转换成字节数组

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

上传数据,返回页面的字节数组

byte[] responseData = webClient.UploadData(uriString, "POST", postData);

返回的将字节数组转换成字符串(HTML)

string srcString = Encoding.Default.GetString(responseData);

3 注销

注销只是固定的转到指定网页,因此只需转到那个网页即可

3.1 实例

System.Diagnostics.Process.Start("IEXPLORE.EXE", "http://newlogin.bjut.edu.cn/F.htm");

4 判断是否登录成功

将登录成功与失败的网页保存起来,再将用户登录时输入后服务器返回的页面也保存起来,比较两个文件的内容即可。比较两个文件内容不同的方法很多,比较两个文件的大小是一种很简单的方法

4.1 实例

//保存返回的页面

HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();

StreamReader sr2 = new StreamReader(response2.GetResponseStream(), Encoding.Default);

string text2 = sr2.ReadToEnd();

StreamWriter sww = new StreamWriter("C:\\result.html", false, Encoding.Default);

sww.Write(text2);

sww.Close();

sr2.Close();

 

//将登陆成功和失败的页面分别转换成两个字符串

StreamReader streamF = new StreamReader(Application.StartupPath + @"/fail.html", Encoding.Default);

string stringFail = streamF.ReadToEnd();

StreamReader streamS = new StreamReader(Application.StartupPath + @"/success.html", Encoding.Default);

string stringSuccess = streamS.ReadToEnd();

StreamReader streamR = new StreamReader("C:\\result.html", Encoding.Default);

string stringResult = streamR.ReadToEnd();

streamF.Close();

streamS.Close();

streamR.Close();

 

//登陆失败

if (stringResult.Length == stringFail.Length)

 

MessageBox.Show("帐号或密码不对,请重新输入");

 

   //登陆成功

else if (stringResult.Length == stringSuccess.Length)

{

MessageBox.Show("您已经成功登录\n在完成工作后,请别忘记注销");

//若用户选择保存存储用户名和密码,修改配置文件

if (chkSave.Checked == true)

{

UpdateConfig("userName", txtuserName.Text);

UpdateConfig("password", txtpassword.Text);

}

}

//删除上面保存的网页

System.IO.File.Delete("C:\\result.html");

 

}

5 保存用户名和密码

保存用户名和密码可以为方便用户使用,省去很多麻烦。可以用修改配置文件的方法来实现

5.1 实例

App.config

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="userName" value=""/>

<add key="password" value=""/>

</appSettings>

</configuration>

 

 

 

private void Form1_Load(object sender, EventArgs e)

{

this.txtuserName.Text = ConfigurationSettings.AppSettings["userName"];

this.txtpassword.Text = ConfigurationSettings.AppSettings["password"];

}

 

 

/// 用来修改当前程序运行目录debug下的app.config文件

/// </summary>

/// <param name="strProgramName">string: 文件名</param>

/// <param name="strKey">string: config文件中的键名</param>

/// <param name="strValue">string: 相应的键值</param>

public void UpdateConfig(string strKey, string strValue)

{

//            System.Reflection.Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();

//            string strFileName = ass.Location.Substring(0, (Asm.Location.LastIndexOf("\\") + 1) ) + strProgramName +".exe.config";

XmlDocument xmlDoc = new XmlDocument();

string strFileName = AppDomain.CurrentDomain.BaseDirectory.ToString() + "loginnew.exe.config";

xmlDoc.Load(strFileName);

string xPath = @"//add[@key='" + strKey.Trim() + "']";

XmlNode node = xmlDoc.SelectSingleNode(xPath);

XmlElement ele = (XmlElement)node;

ele.SetAttribute("value", strValue);

xmlDoc.Save(strFileName);

}

分享到:
评论

相关推荐

    (2021-2022)年专题资料内部银行贷款程序.doc

    2. **提交材料**:申请单位需同时提交与贷款相关的经济合同、票据等材料,以证明其贷款需求的合理性及偿还能力。 3. **信贷员调查**:内部银行的信贷员对申请单位进行详细的调查,包括但不限于其财务状况、经营业绩...

    基于微信小程序的法语写作训练平台设计综述.pdf

    主题模块则为进阶学习者提供了一系列专题学习内容,包括20个不同主题的语料,内容涵盖词汇、常用表达、相关文章和视频。学习者可以在线提交相关语料,为丰富主题内容做出贡献。实战模块则是基于DELF考试的写作要求,...

    专题资料(2021-2022年)《资产评估》期末考试模拟卷(1).docx

    《资产评估》期末考试模拟卷包含了...以上内容详细解释了模拟卷中涉及的资产评估相关知识点,包括市场价值概念、各种评估方法的应用、特定资产的评估技术和评估程序等,这些知识点对于理解和实践资产评估工作至关重要。

    专题资料(2021-2022年收藏)基于51单片机的篮球比赛电子记分牌仿真图完整程序.doc

    8. **设计报告与程序源码**:学生需要提交详细的设计报告,包括硬件电路设计、软件编程逻辑,以及完整的程序源码,以展示其工作原理和实现过程。 9. **参考资料**:项目参考了多本教材和期刊文章,如《单片机原理及...

    专题资料(2021-2022年)《资产评估》期末考试模拟卷.docx

    11. 资产评估程序:广义的程序始于接受委托,包括明确评估事项、执行评估工作直至提交报告和归档管理。 12. 预期收益期限:专利技术的合理期限需考虑其实际使用和被替代的可能性。 13. 商誉特性:商誉是一种无形...

    Maxwell杯内部模拟赛.rar

    【Maxwell杯内部模拟赛】是一场针对青少年信息学奥林匹克竞赛的专题训练活动,由重庆八中主办。这个赛事的设计旨在为初学者提供一个实践和提升编程技能的平台,通过模拟真实的竞赛环境,帮助参赛者熟悉竞赛流程,...

    计算机仿真大赛知识专题PPT学习教案.pptx

    比赛采取全国统一命题的方式,参赛者可以个人或小组形式参赛,提交文字解答、计算机程序和仿真结果。比赛命题可能涵盖公共安全、房价调控、城市数字化等多个社会关注的话题。参赛者应该广泛收集资料,理解题目难度,...

    数据结构专题实验题目与要求(2010年)

    实验的成绩评定标准注重程序的正确性和创新性,要求学生不仅能够实现问题的解决方案,还要能够清晰地解释自己的思路,提交无BUG的代码,并有可能需要提交实验报告。实验报告的质量也是成绩的一部分,需要包含对问题...

    ASP奥运网站专题设计(源代码).rar

    在本案例中,“ASP奥运网站专题设计(源代码).rar”是一个包含ASP源代码的压缩包,它可能是为了教授或展示如何利用ASP技术构建一个与奥运会相关的网站专题。这个项目可能包括了新闻发布、赛事日程、运动员信息、奖牌...

    2011计算机仿真大赛知识专题 .ppt

    参赛者需从指定的命题中选择一个进行解答,提交的文字解答、计算机程序和仿真结果将成为评判标准。 总的来说,计算机仿真是一种强大的工具,它能够帮助我们在现实世界中探索、理解和解决问题。通过参与类似的比赛,...

    C语言程序设计课程的改革与探索.pdf

    - 网络答疑与互动学习:利用论坛、讨论组、QQ等工具进行答疑,设立专题讨论,确保问题得到及时解答,培养团队协作精神和自主学习习惯。 - 培养自主学习:部分知识点要求学生课外自行研究,布置需要查阅资料的作业...

    MMvb好莱坞专题研究电荷阶跃极谱法

    标题中的"MMvb好莱坞专题研究电荷阶跃极谱法"似乎是一个研究项目或课程的名称,其中"MMvb"可能是特定的代号或者研究组的标识,而"好莱坞"可能是指该研究与电影产业或者视觉艺术有关。"电荷阶跃极谱法"是一种化学分析...

    监理师科目2模拟题(四).doc

    对于工程计量,监理工程师提出的程序中,乙方在5天内提交已完成工程量报告是合理的,但监理工程师应在接到报告后14天内核实,提前24小时通知乙方参加计量。如果乙方不参加计量,监理工程师的计量结果仍然有效。然而...

    精品专题资料(2021-2022年收藏)湖南工程学院计算机网络课程设计服务器系统应用实践.docx

    - **应用程序服务器**:提供应用程序的执行环境,支持Web应用程序、企业级应用等。 实践任务包括: - **构建三层局域网**:模拟真实网络环境,通常包括接入层、汇聚层和核心层。 - **部署Web服务器**:安装并...

    专题资料(2021-2022年)IT项目管理3.23项目单元测试方案.doc

    2. **EJB是否遵循标准规范**:确保EJB组件遵循了相关的编程和设计规范,如EJB 3.x标准。 3. **EJB错误检查**:查找可能的异常处理和错误报告问题。 4. **JSP逻辑是否正确**:验证视图层的逻辑,确保显示和交互符合...

    2013第8届智能系统与知识工程国际会议(ISKE2013)(英文).pdf

    智能系统致力于构建能够模拟人类智慧的计算机程序,以解决复杂问题并实现自动化决策。知识工程则是关于获取、表示、存储和应用知识的过程,它在智能系统中起着核心作用,通过构建知识库来支撑系统的学习和推理能力。...

    ACM/ICPC比赛经验分享及代码程序资源

    - **模拟赛**:定期组织模拟比赛,模拟真实的比赛环境,不仅能够锻炼团队的配合能力,还能提高比赛时的心理素质。 - **题库训练**:通过在线平台如LeetCode、Codeforces、HackerRank等进行针对性的练习,积累解题...

    SQL注入专题防范+攻击全手册

    SQL注入是一种常见的网络安全威胁,它利用了Web应用程序未能有效过滤用户输入数据的漏洞,使得攻击者可以执行恶意的SQL命令,获取、修改、删除数据库中的敏感信息,甚至完全控制数据库服务器。本手册全面探讨了SQL...

    助理电子商务师理论模拟试题.docx

    13. **网络调研**:网络直接调研方法包括利用专题性网站、BBSCookie跟踪消费者和网络数据库。 14. **SQL语言**:SQL的Data Definition Language(数据定义语言)用于数据库和对象的操作。 15. **数据输入**:条形...

Global site tag (gtag.js) - Google Analytics