按键 使用WinHttp实现POST方式用户模拟登录网站


引言

这篇文章是我以前在一个论坛里写的,今天把这篇文章转移到这里。
文章主要介绍了如何模拟一个网站的登录。
这里使用的辅助工具是按键精灵,编程语言类似于VB。


实现步骤

第一步,获取登录地址

打开登录界面:

打开调试工具,点击登录按钮,查看数据信息:

从调试工具中可以看到实际登录地址和需要提交的参数。

第二步,获取验证码地址

第三步,在浏览器中正常登录,查看登录成功和失败后返回的信息(方便后边进行判断是否登录成功)

登录失败显示信息:

登录成功显示:

第四步,开始制作

首先设计界面:

代码实现:

'名称:使用WinHttp实现POST方式用户模拟登录网站
'按键ID:383810086wa
'E-mail:383810086@qq.com
'时间:2015.6.13
'-------------------------------------------'======相关数据信息=======================================================
url_login = "http://xxx.com/login.php?action=login" '网站后台登录地址    |
url_verify = "http://xxx.com/yzm.php"               '网站验证码地址      |
'                                                                       |
form_user = "xxxxxxxxxxx"                           '网站用户名          |
form_passwd = "xxxxxxxxx"                           '网站用户密码        |
'========================================================================'获取网站cookie
Form1.InputBox_debug.Text = "正在获取Cookie..." & vbCrlf    '用于在界面上显示运行信息
Dim cookie
Set ObjWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
With ObjWinHttp.SetTimeouts 0,0,0,0.Open "GET", url_login, False.SetRequestHeader "Content-Type","application/x-www-form-urlencoded".Sendcookie = .getResponseHeader("Set-Cookie")  
End With
Form1.InputBox_cookie.Text = cookie                '将cookie写入界面中的InputBox_cookie输入框,方便查看和读取
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "获取cookie完成" & vbCrlf'获取网站验证码
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "正在获取验证码..." & vbCrlf
Dim verify_bit                                     '定义验证码字节集
With ObjWinHttp.SetTimeouts 0,0,0,0.Open "GET", url_verify, False.SetRequestHeader "Content-Type","application/x-www-form-urlencoded".SetRequestHeader "Cookie", cookie             '提交cookie.Send verify_bit = .ResponseBody
End With
Set ObjStream = CreateObject("Adodb.Stream")
With ObjStream.Type = 1.Mode = 3.Open.Write verify_bit                              '写入验证码字节集.SaveToFile ".\verify.jpg",2                   '将验证码保存为本地图片.Close
End With
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "获取验证码成功" & vbCrlf'手动验证验证码
Form1.PictureBox_Verify.Picture = ".\verify.jpg"   '在界面中显示验证码
Form1.Button_Verify.Visible = True                 '显示“确认验证码”按钮
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "请输入验证码" & vbCrlf
MessageBox "请输入验证码"Dimenv IsVerifyDone                                '定义是否已填入验证码
Dim checknum                                       '定义接收验证码变量IsVerifyDone = False                               '默认 没有输入验证码Do                                                 '用于检测是否输入完成验证码If IsVerifyDone Then         Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "验证码已输入" & vbCrlfchecknum = Form1.InputBox_Verify.TextExit Do End IfDelay 100
Loop'进行网站用户登录
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "进行登录..." & vbCrlf
Dim login_data                                     '定义用户登录数据
Dim html_bit                                       '定义登录页面返回字节集login_data = "username=" & form_user & "&password=" & form_passwd & "&checknum=" & checknum
With ObjWinHttp.SetTimeouts 0,0,0,0.Open "POST", url_login, False.SetRequestHeader "Content-Type","application/x-www-form-urlencoded".SetRequestHeader "Cookie", cookie                  '提交cookie.SetRequestHeader "Content-Length", Len(login_data) '提交数据长度.Send login_data                                    '数据提交html_bit = .ResponseBody
End With
With ObjStream.Type = 1.Mode = 3.Open.Write html_bit.Position = 0.Type = 2.Charset = "UTF-8"    .Close
End WithSet ObjWinHttp = Nothing
Set ObjStream = NothingIf Instr(1, ObjStream.ReadText, "成功", 1) > 0 Then     '验证登录后,网站页面返回的数据,查看是否登录成功Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "登录成功!" & vbCrlfMessageBox "登录成功!"
Else Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "登录失败!请检测验证码、用户名、密码是否正确!" & vbCrlfMessageBox "登录失败!请检测 用户名、密码、验证码 是否填写正确!"
End If

调试结果:

博客名称:王乐平博客
博客地址:http://blog.lepingde.com
CSDN博客地址:http://blog.csdn.net/lecepin


这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华硕 RT-AC54U路由器固件功能说明

引言 华硕 RT-AC54U这款路由器固件,界面做的很不错(起码比OpenWrt要好看),功能也比较强悍,但是对于刚入手这个固件的用户可能会对此固件的一些很好用的功能无从下手,所以这里我就写下了这个文章。 固件亮…

HTML5中类jQuery选择器querySelector的使用

为什么80%的码农都做不了架构师?>>> 简介 HTML5向Web API新引入了document.querySelector以及document.querySelectorAll两个方法用来更方便地从DOM选取元素,功能类似于jQuery的选择器。这使得在编写原生JavaScript代码时方便了许多。 用法 …

Find the Kth number(找第K大数)

题目再现 题目内容: 给定N个排序好的序列,每个序列内有M个数字。因此我们总共有N*M个数字,编号为1~N*M。 将N*M个数字排序后输出第K个数字是多少。Hint : 直接将N*M个数字做排序会超过时间限制。 Hint : 每次花O(N)的时间找一个数字&#xf…

Species Tree(HashTable实现)

题目再现 题目内容: 给定一个物种演化图, 关系的表示方式如下: x y : 表示x为y的先祖。 一个物种只会有一个先祖, 一个先祖可以有很多个演化出来的物种, 请你找出每个问题询问物种的祖父物种(先祖的先祖),…

Adjacent Node Sum(邻接表处理)

题目再现 题目内容: 给定一个节点有权重的图, 请你计算与一个节点相邻的所有节点的权重和。 节点编号为1~N。 每个节点的编号即为他的权重。输入格式: 只有一组测资。 第一行有三个数字,N、M、Q。 N表示这张图有多少节点, M表示这…

Maze(BFS处理)

题目再现 题目内容: 给你一个迷宫, S为起点,E为终点。 请你找出走出迷宫所需要花费的最短步数。 你只能往上下左右四个方向移动。输入格式: 第一行有一个数字T,代表有T组测资。 每组测资的第一行有两个数字R、C, 代表…

Lotto(DFS处理)

题目再现 题目内容: 给定N个数字,再从中选定M个数字出来。 将每一种组合内的数字由小到大排列之后, 将所有组合按照字典序排列, 请你找出第X组的第Y个数字。 给定的数字为1~N。 范例1 (N,M,X,Y) (5,2,8,2) 所有组合按顺序排列为…

2016第七届蓝桥杯省赛C/C++ B组试题解析整理

引言 今天是蓝桥杯省赛举办的日子,是一个很激动人心的时刻,也是我第一次参加蓝桥杯,从上午9点到下午1点,做题时间历经4个小时,想想就过瘾。 下面整理一下这次比赛的题目。 *注:此处为了省事儿&#xff…

Linux 小知识翻译 - 「邮件服务器」

这次聊聊「邮件服务器」。 邮件服务器上通常会运行2个服务端软件,「SMTP服务器」和「POP服务器或者IMAP服务器」。 这2个东西,也许使用邮件客户端的人立马就明白了。因为设置邮件客户端的时候,需要指定「发信服务器」和「收信服务器」。 这2个…

终极结束进程方法API

引言 最近在机房里上课的时候,学生的电脑上都安装了相应的学生端软件,而这些软件并没法正常关闭,用任务管理器也无法关闭,下面我说一下如何用Windows API对这类顽固程序进行终结。 福利方法 由于相关方面的规定,这里…

Android Fragments 详细使用

2019独角兽企业重金招聘Python工程师标准>>> Fragments 诞生初衷 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。其上的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多…

安卓UI适配限定符

引言 对于程序在不同尺寸的Android机器上运行,对UI的适用性造成了额外的开销,不过限定符的出现,很方便的解决了这个问题。通过创建限定符相关的文件夹来解决资源的加载。 限定符用处 限定符(mdpi,tvdpi,hdpi)可以帮助我们判断屏幕密度 限定…

docker install on centos 6.x

2019独角兽企业重金招聘Python工程师标准>>> 参考文档:http://docs.docker.com/installation/centos/ 安装epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo 安装docker服务端 yum install docker-io 启动docker /etc/init.…

安卓活动(Activity)和碎片(Fragment)的生命周期

引言 对于安卓中生命周期的过程以及相应的事件的了解是非常重要的。 活动(Activity)的生命周期 Activity 类中定义了七个事件回调方法,与Activity生命周期的每一个环节对应。 1. onCreate() 这个方法你已经看到过很多次了,每个…

又开始写博了

2019独角兽企业重金招聘Python工程师标准>>> 因为太多东西需要记录,所以重新开博。脚印一把 转载于:https://my.oschina.net/junfrank/blog/286348

Android 代码实现查看SQLite数据库中的表

前言 以前写PHP的时候,内置了print_r()和var_dump()两个函数用于打印输出任意类型的数据内部结构,现在做Android的开发,发现并没有这种类似的函数,对于数据库的查看很不方便,于是就写了一下查看数据库表的方法代码。 …

Android 代码执行Linux Shell小记

引言 Android系统是基于Linux内核运行的,而做为一名Linux粉,不在Android上面运行一下Linux Shell怎么行呢? 最近发现了一个很好的Android Shell工具代码,在这里分享一下。 Shell核心代码 import java.io.BufferedReader; impor…

【iHMI43 4.3寸液晶模块】demo例程(版本1.02)发布

技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:http://i-board.taobao.com 银杏科技 GINGKO TECH. 保留权利,转载请注明出处 一、简介: 1、iHMI43 演示程序(版本号:1…

Android 数据存储之文件存储小记

前言 Android操作文件的方式和JAVA I/O操作是十分类似的&#xff0c;在这个我小谈一下。 Android写入文件 在Android中Context类提供了openFileOutput()方法&#xff0c;用于文件写入。默认存储路径为/data/data/<package name>/files/中。 openFileOutput原型&#x…

Android 数据存储之SharedPreferences存储小记

前言 Android的数据存储机制中还提供了SharedPreferences&#xff0c;SharedPreferences是这其中最容易理解的数据存储技术&#xff0c;采用键值对的方式进行存储&#xff0c;而且支持存储多中数据类型。 获取SharedPreferences对象 SharedPreferences文件存放在/data/data/&…