经典技术:利用HTTP自动访问提高网络管理效率

服务器 数据中心
随着互联网的普及,大量专业应用以及网络通信设备都使用Browser/Server界面实现,操作人员使用浏览器往往需要做大量简单重复、相对固定的操作,其实,我们可以利用HTTP自动访问功能来帮助我们提升网络管理效率。

HTTP协议的浏览器是人们访问互联网常用的主要手段。目前使用程序自动访问Web网页尚属于黑客技术范畴,经常用于自动点击网页广告、自动抢注册等活动,很多网页设置验证码试图阻止机器登录。随着互联网的普及,大量专业应用以及网络通信设备都使用Browser/Server界面实现,操作人员使用浏览器往往需要做大量简单重复、相对固定的操作,其实,我们可以利用HTTP自动访问功能来帮助我们提升网络管理效率。

在浏览器接口实现自动访问,实质是由程序代替操作人员操作浏览器,优点是直观,可参照人工浏览器操作和响应编程,易于处理网络不稳定、服务器响应延迟等情况; 缺点是编程较为复杂。

在服务器接口实现自动访问,实质上是由程序取代浏览器直接和服务器交互,优点是编程简单,但要求对HTTP协议有较深入的了解,详细分析页面动作。

我们可以针对不同应用,根据实际情况,选择合适的方法。

HTTP自动访问功能利用之自动修改认证 服务器用户数据

下面介绍一个实际应用案例: 某企业要通过电信提供的Web界面的用户信息管理系统,管理上万个用户账号,人工操作复杂、错误率高、响应不及时,尤其在要求限时更新全部用户账号时,人工操作根本不可能完成。为此,某企业开发了一个自动管理用户程序,应用Windows系统VC++模拟人工浏览器操作实现,由于找到成熟网页操作函数库比较困难,该企业找到了网络佚名作者的WebAuto(1.0.0.1)提供的一些简单易用的网页基本操作函数,刚好满足项目的需要,开发要点如下:

(1)网页操作

VC支持MicroSoft Web Browser ActiveX控件,在系统自动产生的事件处理函数DocumentCompleteExplorer1()中可获取服务器响应的(IHTMLDocument2 *)类型的 HTML文档,并可在该文档上实现浏览器交互操作,浏览器控件可直观显示操作结果。 WebAuto.dll提供了几个基本的网页操作函数:

WEBInputValue(): 在指定名字的文本框输入文本值;

WEBExecScriptFunc(): 执行指定函数名的JavaScript函数;

WEBElemClick(): 可点击单选按钮;

WEBFormSubmit(): 模拟点击表单提交,IE控件完成实际提交动作。

(2)判断返回结果

根据控件的get_LocationURL()判断是否转到目的网页。

WEBGetFrameDoc(): 从含有Frame框架文档中读取Frame内含文档;

WEBGetSource():读取目的文档源码,判断是否有预期结果。

(3)点击弹出窗口

有些网页用alert()弹出Message窗口,提示输入错误和返回结果,并一直等待人工输入。调用WEBDlgClick()函数自动点击弹出窗口,结束等待。也可根据函数返回值判断返回文本,确定操作结果成功或失败,或者超时无响应,即没有弹出预期的窗口。在网络不稳定的情况下,应在定时延迟进程中执行自动点击操作。

(4)验证码

网站的验证码用于防止程序自动登录。验证码在网页中用动态URL表示,WEBVerifyCode函数调用验证码URL,在屏幕显示出来,等待人工查看并输入。关于如何自动识别验证码,随不同网站验证码图像复杂程度不同差异很大。

通过自动访问Web技术能够实现用户账号全程自动管理,并且在批量修改时可达到40条/分钟的处理速度,几个小时即可完成上万条数据修改,从而满足批量修改的需求。

HTTP自动访问功能利用之网页操作函数库的开发

某企业利用WebAuto.dll满足了该项目开发要求,思路是将网页的操作分解为基本动作,基本动作开发相应的函数,既大大降低了应用程序编程工作量,又避免了库函数开发过于复杂。但它还很不完善,为满足自动访问,一般网页要求至少需要增加和完善以下函数或功能:

(1)自动登录需要使用基本验证保护的网站,即在弹出窗口自动输入用户和密码;

(2)增加设置SELECT对象,即选择点击选择下拉菜单的函数;

(3)增加对多Frame网页和多表单文档的支持;

(4)支持点选单选按钮组,即同一名字多个值输入。

其中自动登录和点击确定窗口属于利用Windows系统函数实现,其他都是利用VC的浏览器对象类对HTML文档交互操作。

以下举例说明库函数开发要点:

(1) 自动登录使用基本身份认证

需要在弹出登录窗口输入用户名、密码,点击确定。应在访问网页前设置定时程序,在定时程序中调用自动登录程序。自动登录是嵌套窗口结构。注意弹出登录窗口不是浏览器的子窗口,故先调用FindWindow()根据窗口标题找到登录窗口的句柄,再调用FindWindow()根据窗口类名或标题找到各个子窗口,再SendMessage()向各窗口发送消息,设置记忆选择为“不记忆”。

(2)点击选择SELECT对象的实现

VC定义了各种HTML对象。

实现方法是调用各文档对象的get_forms()获得表单集合,再依次调用各对象的item(),QueryInterface,get_name()获得目标SELECT对象,***调用SELECT 的put_selectedIndex()方法设置选择的值。支持多表单的就是get_forms(),读出包含所有表单的集合,逐一读出表单名称,取出与目标表单名称相符的表单即可。

Web操作函数库虽然每条函数只有几十条语句,主要使用各种系统定义各种类型参数调用各种系统函数,编程和调测还是相对繁杂。将访问网页行为分解为十几个对应函数,简单地用表单对象名字做参数,接口简单易用,把复杂的系统函数调用封装到函数内,开发自动访问Web应用程序就比较容易了。

HTTP自动访问功能利用之Linux系统自动设置网络设备

上文提到的某企业还有一些分散各地的办公网点,需要自动设置ADSL PPPOE拨号连接。绝大多数路由器仅提供Web界面设置,只有开发HTTP自动访问程序,才能满足动态自动配置的需要。

在Linux环境下,无需理会可视操作界面和弹出窗口、网络延迟等,采用服务器接口比较适宜。

“Haxx”的开源项目libcurl提供了Linux和Windows等平台下客户端和Web服务器间用于实现HTTP协议交换数据的函数库。但是由于该企业系统对存储空间要求苛刻,无法使用功能丰富的libcurl库函数,必须转而寻找尽量简单的实现基本HTTP协议的函数库。Ben Campbell开发的开源软件happyHTTP仅用一个C++源文件就可实现简单的HTTP协议。

以下介绍用happyHTTP实现自动设置路由器的开发要点:

(1) 程序结构

HTTP协议客户端请求和服务器响应基本结构(服务器响应无请求头):

happyHTTP定义一些基本类实现构造和发送请求,接收和分析响应的功能。

调用happyHTTP的:Connection对象的request函数发送GET/POST,调用Connection的pump()函数处理来自服务器的响应。在定义的CALLBACK函数中获取服务器响应文档的相关信息。

(2) 基础认证:

绝大多数路由器用基础认证,登录时要求输入用户名和密码,RFC2617描述了基础认证过程:

①客户端发送URL请求;

②服务端发送401文档(无权限),并在HEADER加入“WWW-Authenticate”属性,声明要求basic authentication;

③客户端重新发送请求,并在以后发送请求HEADER加入” Authorization”属性,设置为经过base64编码的用户名和密码。

这个过程在上一个应用中由浏览器控件自动处理。在本应用中调用request模拟浏览器发送认证响应,在设置完成前保持连接会话。Base64是简单地将二进制数据编码为ASCII码的编码方法,可在libcurl源码中找到该函数。

极少数路由器采用动态网页登录,不需要基本验证,登录操作就是普通提交表单操作。

(3) 确定请求发送内容和响应处理

设置一个网页在提交时需要将设置内容发送到路由器。Request请求头目标URL表单ACTION指向。如上所述,HEADER应有身份验证属性和保持连接属性.BODY则是提交网页需要发送的参数。

通过分析网页文件,确定发送的项目和如何处理服务器的响应,这是比较复杂的过程。好在有HTTP协议监控器,可记录请求和响应的详细内容。实际编程时可借助HTTP协议监控器,如EffeTech Http Sniffer,人工进行网页操作,参照EffeTech记录结果,设计发送和接收内容。注意在设置结束前,在请求头中设置Connection属性为 “Keep-Alive”,保持会话连接,准确模拟人工执行连续操作结果。

(4) 判断操作执行结果

①用重定向进行地址判断。服务器执行完操作后,转向相应网页,或转向错误网页,服务器给出303(重定向)文档,在HEADER Location属性中可判断是否转向正确网页。

②如需要判断网页内容,可查找文档BODY中指定信息,用于监控路由器状态,如是否已拨号连接成功。

③超时无响应情况下,响应处理函数pump()会超时退出,抛出异常。

应用happyHTTP实现了自动配置功能,正确模拟了人工操作结果,目标代码只有80KB左右,可满足存储空间苛刻的要求。

(5) happyHTTP的不足和改进

happyHTTP1.0对HTTP协议处理不完善,存在BUG,需要原作者改进。在对存储和内存要求不严格的应用中,推荐使用较为成熟的开源项目libcurl。

随着Web应用不断增加和相关工具不断完善,通过HTTP Web界面自动访问系统将成为提高网络管理效率的重要手段。

 

【编辑推荐】

  1. Serv-U Web客户端HTTP请求远程溢出漏洞
  2. 配置WCF服务HTTP-GET元数据交换方式案例分析
  3. Python HTTP服务快速搭建
责任编辑:桑丘 来源: 计算机世界
相关推荐

2009-01-08 09:54:00

2022-07-18 15:24:31

物联网能源管理智能建筑

2010-11-15 16:46:49

Oracle查询效率

2021-07-18 07:45:04

物联网资产IOT

2021-07-17 06:48:09

AI人工智能

2021-02-07 09:26:55

机器学习建筑能源ML

2009-02-20 10:11:00

网络服务网络管理

2017-03-14 11:17:06

自动化系统服务器文档

2022-03-08 23:22:07

区块链比特币加密货币

2023-04-03 16:21:20

数字孪生数字建筑

2011-06-21 13:57:43

2010-04-01 14:51:52

Visual Stud

2022-03-26 22:51:06

区块链供应链技术

2019-11-05 15:40:41

网络安全跳槽那些事儿软件

2009-07-24 16:25:57

远程诊断远程协助

2010-04-13 11:01:16

IPv6技术Web安全Blue Coat

2009-03-02 10:00:00

2009-06-30 15:54:00

数据库访问JSP

2022-04-20 15:45:34

物联网

2016-04-28 15:19:30

自动化云资源管理
点赞
收藏

51CTO技术栈公众号