.net 模拟登录Post提交

时间:2023-01-24 08:21:24

最近在做一个项目,要求集成到第三方系统中,由于先前没有做过类似的活,所以折腾了几天,蹭着有闲情的时候记录一下。

以下实例,都是我用Asp.net语言进行开发的,关于HTML元素的获取,使用的是Google浏览器。

1. 非Asp.net开发的网站

我们拿www.51cto.com来做实例,首先进入www.51cto.com,点击登录,就进入到该博客的登录页面。使用Google浏览器,按下F12,找到其表单的action值,可以发现其action值为 http://home.51cto.com/index.php?s=/Index/doLogin,然后点击账号和密码的文本框,右击鼠标,审查元素,分别找到其对应的name值。

下面的代码是账号文本框的html代码,我们要的是其name属性,发现只为email,同样的方法我们可以得到密码的name属性。

<input name="email" type="text" class="login_shuru1" onfocus="this.className='login_shuru2';if (this.value=='用户名/注册邮箱') {this.value=''}" onblur="this.className='login_shuru1';if (this.value=='') {this.value='用户名/注册邮箱'}" value="用户名/注册邮箱">

我们要的基本元素都已经,现在我们就可以模拟登录51cto了,新建一个Asp.net的项目,写上几行html代码,如下

<form action="http://home.51cto.com/index.php?s=/Index/doLogin" method="post" name="_DominoForm" id="form1" >
<input name="email" id="email" type="hidden" value="whonest@sohu.com" />
<input name="passwd" id="passwd" type="hidden" value="password" /> </form>

然后再写两行JS代码,进行表单提交

var theForm = document.getElementById('form1');
theForm.submit();

现在运行程序看一下,如果填写的用户名和密码正确的话,发现就已经模拟登录到51cto的网站了。

[多说一句:如果登录失败,和该网站的按钮有点关系,按钮是图片按钮,用审查元素的方法,找到button的name属性,在Form表单下添加下面几行代码就可以了。]

<input type="hidden" name="button" id="button" value="登陆" />
<input type='hidden' name='button.x' id='button.x' value='26' />
<input type='hidden' name='button.y' id='button.y' value='86' />

[PS:这三个的值,似乎不重要,可以随便填的]

2. ASP.net开发的网站

为何要将Asp.net开发的网站拿出来单独说明,这和它背后的实现技术有关系,详细不说明,直接看实例。我发现博客园正好是用Asp.net开发的,所以我们就拿博客园作为实例来讲,同上面的操作一样,我们进入登录页面找到我们想要的几个元素。

首先,我们我们写上和1类似的代码,如下

<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1"
id="form1">
<input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
<input name="tbPassword" type="txtPWD" id="tbPassword" value="password" />
</form>

运行程序,我们发现压根就没什么发现,只是进入了一个普通的登录页面而已。细心的朋友应该会发现,其源码中有几个隐藏的div层下的input,分别是__LASTFOCUS、__EVENTARGUMENT、__EVENTTARGET、__VIEWSTATE和__EVENTVALIDATION,我们在这里比较有用的就是__VIEWSTATE和__EVENTVALIDATION这两个玩意儿,所以我们得把代码做个简单的修改,修改后的代码如下所示

.net 模拟登录Post提交
<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1"
id="form1">
<input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
<input name="tbPassword" type="txtPWD" id="tbPassword" value="password" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05" />
</form>
 

有人会问,这两个属性怎么传值,其实很简单,查看源代码,把我们看到的值直接复制过来就行了。OK,我们继续运行程序,发现用户名是传入了,但是还是不能进入系统中,为什么呢? 进过测试发现是按钮没有传入,所以我们接着改改代码

.net 模拟登录Post提交
<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1"
id="form1">
<input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
<input name="tbPassword" type="hidden" id="tbPassword" value="password" />
<input type="hidden" name="btnLogin" id="btnLogin" value="登陆" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05" />
</form>
 

再运行程序,就发现已经成功登录了。[PS:如果登录按钮是图片按钮,就要参考1的多说一句里面的代码来完成了]

传入按钮的方式,除了为按钮赋值,还有一种方式,就是为我们先前提到的__EVENTTARGET,赋值为btnLogin,这个是博客园登录按钮的name值,根据实际情况我们或许需要改改其值。修改后的另外一种代码形式

.net 模拟登录Post提交
<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1" id="form1">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="btnLogin" />
<input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
<input name="tbPassword" type="hidden" id="tbPassword" value="password" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05" />
</form>
 

3. 为了灵活性

在项目中我们往往需要根据实际情况传入不同的值,这样我们就可以使用JS传入值,在ASP.net中,使用JS调用后台代码是很方便的,其写法形式如下

var actionUrl = "<%= this.GetActionUrl() %>"

4. 静态网页抓取,动态网页抓取,模拟登陆日志: 

http://www.crifan.com/note_about_website_crawl_and_emulate_login/

.net 模拟登录Post提交的更多相关文章

  1. &lbrack;PHP自动化-进阶&rsqb;001&period;CURL模拟登录并采集数据

    引言:PHP可以通过libcurl实现模拟登录,提交数据,违法乱纪,烧杀抢虐等等事项. 简单说明一下"libcurl",补一下脑: libcurl目前支持http.https.ft ...

  2. PHP之CURL实现含有验证码的模拟登录

    博主最近在为学校社团写一个模拟登录教务系统来进行成绩查询的功能,语言当然是使用PHP啦,原理是通过php数据传输神器---curl扩展,向学校教务系统发送请求,通过模拟登录,获取指定url下的内容. ...

  3. C&num;三种模拟自动登录和提交POST信息的实现方法【转】

    网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法.       网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以 ...

  4. C&num;三种模拟自动登录和提交POST信息的实现方法

    网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法.       网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以 ...

  5. PHP cURL 使用cookie 模拟登录

    cURL是什么 cURL: http://php.net/manual/zh/book.curl.php PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务 ...

  6. Python requests模拟登录

    Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...

  7. php中CURL实现模拟登录并采集数据

    在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...

  8. &period;NET微信模拟登录及&lbrace;base&lowbar;resp&colon;&lbrace;ret&colon;-4&comma;err&lowbar;msg&colon;nvalid referrer&rcub;&rcub;的解决办法

    12年的时候写了些关于微信开发的内容,当时看好这个东西,可惜当时腾讯开放的权限太少,之后的一年多时间没有太关注了. 现在又要重新开始微信开发的阵容了,微信只是个入口,微网站才是趋势. 我是个水货,所以 ...

  9. curl 模拟登录微信公众平台带验证码

    这段时间一直写个项目, 从切图到前端到后台都要搞定,真tm累. 今天下午手残,不停用错误的密码去模拟登录微信公众平台,结果后来出现验证码,瞬间悲剧(菜鸟从来没搞过带验证码的). 研究了一下,发现其实很 ...

随机推荐

  1. Apache htpasswd命令用法详解

    一. 基础 htpasswd建立和更新存储用户名.密码的文本文件, 用于对HTTP用户的basic认证. # /usr/local/apache/bin/htpasswd –help Usage: h ...

  2. &period;Net的Excel 导出 格式设置

    添加引用:Microsoft   Excel   11.0   Object   Library ; 添加:using Microsoft.Office.Interop.Excel; 一.打开Exce ...

  3. Qlikview 处理增量数据的脚本

    一般设计Qlikview报表的时候需要些2个脚本文件,一个针对Qlikview的Server job 导出数据到qvd数据文具. 另一个用户访问的Qlikview的脚本是直接展示qvd文件的数据. 事 ...

  4. hdu1827 强连通

    题意:一个人需要联系其他所有人,已知他自己联系每个人的花费,并且他可以联系某个人再让他联系他能联系到的人,给出一系列关系表示 A 能够联系 B.问他最少需要联系多少人,花费多少钱 首先,建成一个有向图 ...

  5. Github欢乐多 PHP神级代码引发吐槽热

    前日,github的PHP板块惊现一段能够提升70%运行效率的代码,引发了全世界众多网友的吐槽和调侃,“awesome!”.“well done!”.“PHP是世界第一语言!”平时不苟言笑,埋头苦干的 ...

  6. HSV颜色识别demo

    HSV(Hue, Saturation, Value)色彩空间是一种区别与RGB的表示形式.其模型可视为一个倒立的棱锥或圆锥. 其中H为色调,用角度度量,取值范围为0°-360°,从红色开始按逆时针方 ...

  7. go笔记-熔断器

    参考: https://studygolang.com/articles/13254 区别:(限速器 VS 熔断器) 限速器(limiter)可以限制接口自身被调的频率 熔断器可监控所调用的服务的失败 ...

  8. POJ - 1222: EXTENDED LIGHTS OUT (开关问题-高斯消元)

    pro:给定5*6的灯的状态,如果我们按下一个灯的开关,它和周围4个都会改变状态.求一种合法状态,使得终状态全为关闭: sol:模2意义下的高斯消元. 终于自己手打了一个初级板子. #include& ...

  9. Expression&lt&semi;Func&lt&semi;T&gt&semi;&gt&semi;和Func&lt&semi;T&gt&semi;

    以前用EF的时候,由于where的时候有Expression<Func<T>>和Func<T>两种查询条件,误用了Func<T>那个重载,后来还想通过f ...

  10. 提交代码到自己的github仓库

    说起来尴尬,好几年前就搞了github建了仓库,当时玩得还有点6,后来一直的公司都是svn,自己业务项目也没玩,都忘了要怎么提交代码到自己的仓库了. 这边再来一波记录吧. 一.配置用户名 git co ...