zoukankan      html  css  js  c++  java
  • HttpWebRequest模拟c#网站登录

     用户名
    密码

    模拟登录asp.net开发的网站

    关心两个问题:通过控件属性获取数据、响应事件。

    上面是一个普通的asp.net表单。输入用户名、密码后,点击按钮将会进入各自绑定的后台函数,而不仅仅是将form POST。如果点击登录进入登录验证,如果点击是更改密码进入更改密码处理。

    获取POST数据及格及格式可以通过浏览器或者http协议工具,如fiddler分析。

    上图所示的登录界面中,需要提交的表单数据是:loginname=loginname&password=password。如只提交这两数据,无法通过asp:TextBox.value获取数据,也无法进入按钮响应的事件

    响应事件

    如何触发事件?一个页面可能有多个post按钮,如修改、删除,按钮,页面提交后,会进入对应的事件中。通过什么机制触发事件一直没有找到满意的答案。

    之前在博问中寻求过帮助,也许是没有彻底理解热心园友的回复,问题一直没有解决,但依然感谢走过、路过的朋友。

    博问链接:1、c#模拟网页登陆   2、 HttpWebRequest 模拟登录

    直到在博客园看到了这篇博文才实现了c#网站的登录。

    对于asp.net开发的网站,需要将__VIEWSTATE__EVENTVALIDATION作为数据写入。

    e.g.  loginname=loginname&password=password&__VIEWSTATE=&__EVENTVALIDATION=.

    数据需要UrlEncode编码处理

    数据POST详解

    1、表单数据,参数名称获取在上两篇博问中给出了详细的解答。

    2、固定的__VIEWSTATE__EVENTVALIDATION

         这两个数据是ASP.NET特有的,可以从源码中取得。我比较倾向使用正则表达式实现。

      获取__VIEWSTATE

    Regex reg = new Regex("id="__VIEWSTATE" value="((?<v>.*?)")");
    

      获取__EVENTVALIDATION

    Regex("id="__EVENTVALIDATION" value="((?<v>.*?)")");

    3、触发事件

      传递数据时把控件的name加上去。对于image需要有两个参数:btn.x和btn.y。

      name=admin&password=123&__VIEWSTATE=&__EVENTVALIDATION=&login=.

      login是提交按钮的name。

  • 相关阅读:
    图数据库的选择与对比(Neo4j)
    pip install ahocorasick报错以及Requirement already satisfied问题
    从知识图谱到认知图谱: 历史、发展与展望
    kafka(一)—— kafka安装简单使用
    python管理docker
    Javaweb前后端分离项目docker部署
    django + uwsgi + nginx部署(前后端不分离)
    坑(八)—— LayUI框架中append新的元素的问题
    docker(三)—— 避免一直输入sudo
    坑(七)—— 表单提交方式
  • 原文地址:https://www.cnblogs.com/lucika/p/4290698.html
Copyright © 2011-2022 走看看