转自http://blog.csdn.net/foryouslgme/article/details/51822209

首先说一下使用Python模拟登录或注册时,对于带token的页面怎么登录注册模拟的思路:

1、对于带token的页面,需要先从最开始的页面获取合法token

2、然后使用获取到的合法token进行后续操作

3、token一般存储的地方有两个:

【一种是携带在cookie中】、【一种是在respose(页面返回)的隐藏表单中】,获取思路类似

释:header是针对服务端有各种限制或特定需求时使用的,一般服务器会进行类似如:X-Requested-With、Content-Length、User-Agent等的验证,所以需要将其以字典的形势发送给服务器

#reg.py

'''

此代码只实现了注册的第一步【手机发送验证码】,主要解决的获取token

具体操作有:获取页面第一次请求时的重要信息,如:cookie与token

'''

import requests

#拼接url

host = "http://10.70.18.33:8083/"

url1 = host + "shopxx-mobile/register.jhtml"

#初始化url请求对象

r = requests.get(url1)

#获取url请求对象中的有用信息,如token、cookies

token = r.cookies.items()[][]

cookies = r.cookies

#以下为测试,所获取的token及cookie的格式

print(type(token))

print(token)

print(cookies)

print(r.headers)

print(r.url)

#手机号码发送验证码的url拼接

url2 = host + "shopxx-mobile/register/send.jhtml"

#拼接header中的重要数据,如:token、cookie、User-Agent、Content-Length、X-Requested-With等,其中除token及cookie是通过上面的代码获取到的之外,其它的均可以通过firefox浏览器进行获取

headers = {

"token": token,

"Host": "10.70.18.33:8083",

"User-Agent":" Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0",

"Accept": "application/json, text/javascript, */*; q=0.01",

"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"Accept-Encoding": "gzip, deflate",

"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",

"X-Requested-With": "XMLHttpRequest",

"Connection":"keep-alive",

"Content-Length": "",

"charset":"UTF-8",

"cookie":"token=" + token

}

#一般登录注册页面均是post方式进行提交的,需要将post需要提交的数据(此处为需要发送验证码的手机号码)进行组装

data = {'mobile':'1851174****'}

#初始化post请求对象(需要传入url、提交的数据、header)

s = requests.post(url2,data,headers=headers)

#打印返回结果

print(s)

print(s.status_code,s.text)

执行结果

/Users/frankslg/PycharmProjects/cjb/mobile/regist.py

7c74a4cce353aec3133005feb40a9f39

]>

{'Date': 'Mon, 04 Jul 2016 08:53:30 GMT', 'Set-Cookie': 'token=7c74a4cce353aec3133005feb40a9f39; Path=/', 'Server': 'Apache-Coyote/1.1', 'Content-Type': 'text/html;charset=UTF-8', 'Content-Language': 'zh-CN', 'Transfer-Encoding': 'chunked'}

http://10.70.18.33:8083/shopxx-mobile/register.jhtml

200 {"type":"success","content":"恭喜您,账号注册成功!"}

函数封装

import requests

def reg():

host = "http://10.70.18.33:8083/"

url1 = host + "shopxx-mobile/register.jhtml"

r = requests.get(url1)

token = r.cookies.items()[0][1]

url2 = host + "shopxx-mobile/register/send.jhtml"

headers = {

"token": token,

"Host": "10.70.18.33:8083",

"User-Agent":" Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0",

"Accept": "application/json, text/javascript, */*; q=0.01",

"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"Accept-Encoding": "gzip, deflate",

"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",

"X-Requested-With": "XMLHttpRequest",

"Connection":"keep-alive",

"Content-Length": "",

"charset":"UTF-8",

"cookie":"token=" + token

}

data = {'mobile':'1851174****'}

s = requests.post(url2,data,headers=headers)

print(s.status_code,s.text)

if __name__ == '__main__':

reg()

用python实现模拟登录人人网

用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46 我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路 ...

Python入门基础学习 二

Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

使用Python+Selenium模拟登录QQ空间

使用Python+Selenium模拟登录QQ空间爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleniu ...

【Python】模拟登录上海西南某高校校园网 (jaccount)

好久没写东西了,最近学习了一下模拟登录,以校园网为例,作一记录. 去年的时候写过一篇模拟登录的文章,用的是登录后的cookies,这种操作比较傻瓜,也不智能,不够自动化,本质还是手动登录. 这次我尝试 ...

python实现模拟登录【转】

原文网址:http://www.blogjava.net/hongqiang/archive/2012/08/01/384552.html 本文主要用python实现了对网站的模拟登录.通过自己构造p ...

python实现模拟登录

本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程.   当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...). ...

Python爬虫模拟登录带验证码网站

问题分析: 1.爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 2.首先得明白 ...

python爬虫22 | 以后我再讲python「模拟登录」我就是狗

接下来就是 学习python的正确姿势 做爬虫 绕不开模拟登录 为此小帅b给大家支了几招 python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定! 有些网站的登录很弱鸡 传个用户名和密 ...

python爬虫模拟登录的图片验证码处理和会话维持

目标网站:古诗文网 登录界面显示: 打开控制台工具,输入账号密码,在ALL栏目中进行抓包 数据如下: 登录请求的url和请求方式 登录所需参数 参数分析: __VIEWSTATE和__VIEWSTAT ...

随机推荐

PAT 1003. 我要通过!(20)

"答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出"答案正确&quo ...

Beta阶段站立会议-02

项目名:在线考试系统 组名:金州勇士 组长:尹良亮 组员:王汉斌.杜月.闫浩楠 代码地址: ssh:git@git.coding.net:handsomeman/examm.githttps://gi ...

MapReduce原理及其主要实现平台分析

原文:http://www.infotech.ac.cn/article/2012/1003-3513-28-2-60.html MapReduce原理及其主要实现平台分析 亢丽芸, 王效岳, 白如江 ...

bzoj1662: [Usaco2006 Nov]Round Numbers 圆环数

Description 正如你所知,奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺序.她们甚至也不能通过仍硬币的方式. 所以她们通过"round number&quot ...

App Store 审核 IPv6 问题

应用提交了N次,每次被拒都是说IPv6的事情,花点功夫把这个事情搞清楚. 苹果审核人员回复的原因都差不多,说在他们的IPv6-Only的环境中测试应用,无法正常请求我们的服务器. 因为我们的域名确实没 ...

【LintCode·容易】字符串置换

字符串置换 描述: 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例: "abc" 为 &qu ...

KUANGBIN带你飞

KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题    //201 ...

两个队列实现栈&两个栈实现队列(JAVA)

1,两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:栈的特点时先进后出,队列的特点是先进先出. 若此时有两个队列stack1,st ...

ES6 Set 和 Map

ES5 模拟Set 与 Map 集合 Set 常用于检查对象中是否存在某个键名 Map集合常被用于获取已存的信息 所有对象的属性名必须是字符串,那么必须确保每个键名都是字符串类型且在对象中是唯一的 数 ...

Linux内核设计期中总结

Linux内核设计期中总结 ● 知识点 一.计算机是如何工作的 计算机是按照冯·诺依曼存储程序的原理. 在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器 ...

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐