1.工作需求

有很多事项,每个事项分为:名称、种类。时间等,需要把每个事项逐个输入到网页中并提交。

如果用人肉操作的话,流程就是先登录到网站后台,点击“添加”——>输入各项内容——>点击“保存”。然后重复这个动作100遍。如图:

2.设想的解决办法

对手工“登录”、“添加”、“保存”的全过程进行抓包,获取整个流程提交的数据,然后将其POST到服务器。

3.具体操作

  3.1 抓取并分析操作时的数据

使用Chrome浏览器,打开所需登录的页面:http://222.000.36.113/ ,并输入账号与密码:

然后按下键盘的F12,浏览器弹出“开发者工具”的界面,选择"Network":

然后将鼠标移回登录窗口,点击“登陆”。然后“开发者工具”界面会出现POST和GET的文件与数据,找出登录对应的文件,点选Header标签。

此时在Form Data里面能看到POST到服务器的参数(明文密码,汗):

登录进去之后,点击“添加”按钮,出来一个表单界面,让填写内容。开始填写各项内容ing(截图只是内容一部分):

辛苦填完之后,点击“保存”。内容就保存在了服务器中。

此时在“开发者工具”里面就能看到点击“保存”按钮后,浏览器的行为:

这次POST的数据类型和登录时的不同了(见红色方框)。

登录时是Form Data,而提交时却是Request Payload。

(这一点在之后的操作中难倒了我。我不会用Python的Requests模块提交这些数据。因为我不知道如何加上Cookie)

以上就是登录+提交的全程。

  3.2编程实现

    3.2.1 模拟登录获取Cookie

经过我多次试验,发现提交这些数据需要用到Cookie。i所以先模拟登录获取Cookie:

import httplib
import urllib
#定义请求头
reqheaders={'Content-type':'application/x-www-form-urlencoded',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Host':'222.000.36.113',
'Origin':'http://222.000.36.113',
'Referer':'http://222.000.36.113/login_loginOut.fdo',
'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',} #定义post的参数
reqdata={'tnnd':'abcdef','tmmd':'mimaqqq'} #对请求参数进行编码
data=urllib.urlencode(reqdata)
#连接到服务器
conn=httplib.HTTPConnection('222.000.36.113')
#提交登录的post请求
conn.request('POST', '/login_loginIn.fdo', data, reqheaders)
#打印服务器返回请求头中设置的cookie
print(res.getheader('Set-Cookie'))

   3.2.2模拟提交

所需提交的Request Payload属于 Multipart-Encoded 格式,在Python的文档里有记载:

http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file

文档中的操作方法是:
url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
r.text

其中 report.txt 里面就是上图的Request Payload 下方的一长串字符内容。

可是我按照文档进行操作的时候不成功,是因为服务器需要Cookie而我没加上?那么Requests这个方法怎么加上Cookie呢?

于是我使用了多年前渗透测试中的一个技巧:

a.先把浏览器提交过程中所有POST的内容全部抓了下来,保存为“1.txt”。用的是WSockExpert。

b.使用NC,“nc  222.000.36.113  80  < 1.txt”,把txt的内容全部提交到目标服务器。

经测试,此方法可行。但要注意两点:

一是Cookie要有效。可以由模拟登录的步骤中获取。

二是1.txt 的编码格式为UTF-8,不然提交的内容全是乱码!

(第二条当时百思不得其解,最终人肉测试了出来。最后才发现response headers写的是charset=UTF-8,忽略了,汗)

那就用Python来调用NC吧:

import os
os.system("nc  222.000.36.113  80  < 1.txt")

剩下的工作,就是将各个事项汇总到一起,然后用Python将对应的事项内容替换到1.txt的那一套格式里面,逐个提交100次!

PS

请问一下如何用Python提交这个Request Payload?调用NC太不优雅了。

Python结合NC.exe 实现模拟登录&批量填表的更多相关文章

  1. Python爬虫实战五之模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...

  2. python RSA加密解密及模拟登录cnblog

    1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...

  3. C#程序模拟登录批量获取各种邮件内容信息

    一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个app有一个活动,通过邮箱注册账号激活可以领5元红包,而恰恰你手上又有一批邮箱可用,那么批量获取邮箱中的激活链接去激活则是 ...

  4. Python实现北邮人论坛模拟登录

    推荐去我的博客里查看这篇文章,效果更佳: http://fuxuemingzhu.cn/2017/08/12/byrbbs-login/ 模拟登录北邮人论坛可能是每个学着写爬虫的北邮人必备技能了.在网 ...

  5. 基于python的request库,模拟登录csdn博客

    以前爬虫用urllib2来实现,也用过scrapy的爬虫框架,这次试试requests,刚开始用,用起来确实比urllib2好,封装的更好一些,使用起来简单方便很多. 安装requests库     ...

  6. Python网络爬虫实战(四)模拟登录

    对于一个网站的首页来说,它可能需要你进行登录,比如知乎,同一个URL下,你登录与未登录当然在右上角个人信息那里是不一样的. (登录过) (未登录) 那么你在用爬虫爬取的时候获得的页面究竟是哪个呢? 肯 ...

  7. python中使用cookie进行模拟登录

    背景:使用cookie模拟登录豆瓣->我的豆瓣网页 [准备工作] 1.通过Fiddler抓取“我的豆瓣”url: 2.通过Fiddler抓取“我的豆瓣”cookie值. import urlli ...

  8. urllib库利用cookie实现模拟登录慕课网

    思路 1.首先在网页中使用账户和密码名登录慕课网 2.其次再分析请求头,如下图所示,获取到请求URL,并提取出cookie信息,保存到本地 3.最后在代码中构造请求头,使用urllib.request ...

  9. python之cookie, cookiejar 模拟登录绕过验证

    0.思路 如果懒得模拟登录,或者模拟登录过于复杂(多步交互或复杂验证码)则人工登录后手动复制cookie(或者代码读取浏览器cookie),缺点是容易过期. 如果登录是简单的提交表单,代码第一步模拟登 ...

随机推荐

  1. MongoDB如何使用“”用户名和密码“”

    在去年的 DB 勒索事件之后, 不少的同学开始加强 Mongodb 的安全性, 其中一种办法就是设置复杂的密码. 那么问题来了, 如果设置的密码里包含一些如 “@”, “:” 一样的特殊字符怎么办? ...

  2. 使用vim修改和查看16进制文件

    使用前的准备工作,如果没有安装,使用命令安装: pacman -S vim 使用vim的十六进制功能查看和编辑文本文件,创建测试文件,使用命令如下: vim test.txt 进入“插入”模式,使用命 ...

  3. Linux 6.x 下Oracle 11g R2 安装配置

    Oracle 11g R2 数据库安装硬件配置要求: 最小内存 1 GB of RAM 虚拟内存容量,这个oracle也有要求,不用担心此时的swap分区不够oracle的要求 .虚拟内存swap如何 ...

  4. Ruby on rails初体验(三)

    继体验一和体验二中的内容,此节将体验二中最开始的目标来实现,体验二中已经将部门添加的部分添加到了公司的show页面,剩下的部分是将部门列表也添加到公司的显示页面,整体思路和体验二中相同,但是还是会有点 ...

  5. 基于WPF系统框架设计(9)-多值绑定之IMultiValueConverter

    应用场景 我想把View层的一个布局控件和功能按钮传到ViewModel层,达到动态变更布局,同时灵活获取功能按钮的属性,让View和ViewModel完全分离,而不受View层影响. 最后我想到使用 ...

  6. Your build settings specify a provisioning profile with the UUID, no provisioning profile was

    http://blog.csdn.net/rbyyyblog/article/details/12220875 在Archive项目时,出现了“Your build settings specify ...

  7. doviceone- http组件进行webservice的POST请求

    var http = mm("do_Http"); http.method = "POST"; // GET | POST http.timeout = 100 ...

  8. SecureCRT设置超级终端

    SecureCRT可以代替Windows中的超级终端,用来连接网络设备的Console口新建连接Serial串口,配置为:Bits per second: 9600Data bits: 8Parity ...

  9. 在Android上编译OSG[3.0.2 ] (转)

    在Android上编译OSG[3.0.2 ] 分类:Android   This file contents can be applied for version OpenSceneGraph(OSG ...

  10. Python--图像处理(2)

    skimage提供了io模块,顾名思义,这个模块是用来图片输入输出操作的.为了方便练习,也提供一个data模块,里面嵌套了一些示例图片,我们可以直接使用. 引入skimage模块可用: 1 from  ...