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. 如何在Linux的桌面上创建快捷方式或启动器

    如果在Linux桌面系统中你经常使用一个程序,你可能想去创建一个“桌面快捷方式”,以便于你在桌面只要点击一下快捷方式就可以启动它.虽然不少带有图形界面的程序会在安装时自动在桌面上创建快捷方式,还有一些 ...

  2. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---23

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  3. jmeter登录测试

    测试步骤: 1.测试计划--右键添加--Threads--线程组 2. 线程组--右键--http信息头管理器 输入Content-Type=application/json,表示接口请求的默认设置: ...

  4. uva 1611:Crane(构造 Grade D)

    题目链接 题意: 一个序列,你可以选择其中偶数长度的一段,然后中间切开,左右两段交换.现给你一个1~n的某个排列,求一个交换方案,使得排列最终有序.(交换次数 < 9^6) 思路: 从左到右,依 ...

  5. 【linux高级程序设计】(第七章)终端及串口编程 未完成

    一.端口设备类型 1.显示设备基本信息 cat /proc/tty/drivers 里面包括了: 当前终端:/dev/tty 前台控制台终端:/dev/console 用于创建虚拟终端的:/dev/p ...

  6. EventBus 3.0: 入门使用及其使用 完全解析

    前言 EventBus是greenrobot再Android平台发布的以订阅-发布模式为核心的开源库. EventBus翻译过来是事件总线意思.可以这样理解:一个个(event)发送到总线上, 然后E ...

  7. jdbc in postgres

    try { Class.forName("org.postgresql.Driver").newInstance(); String url = "jdbc:postgr ...

  8. WEB接口测试之Jmeter接口测试自动化 (一)(初次接触)

    软件测试自动化从不同的测试阶段分类,可从下层到上层依次分为单元测试-->接口测试-->界面自动化测试. 单元测试一般有开发人员自行完成,而界面自动化测试合适的测试条件又很难达到,测试人员在 ...

  9. win7下用PyInstaller把Python代码打包成exe文件

    2013-11-05 22:02:14|   1.安装 使用PyInstaller需要安装PyWin32. 下载与Python对应的PyInstaller版本,解压后就算安装好了. 例如,安装了PyI ...

  10. vue.js移动端app实战2

    貌似有部分人要求写的更详细,这里多写一点vuel-cli基础的配置 什么是vue-cli? 官方的解释是:A simple CLI for scaffolding Vue.js projects,简单 ...