python 模拟登陆,请求包含cookie信息
需求:
1、通过GET方法,访问URL地址一,传入cookie参数
2、根据地址一返回的uuid,通过POST方法,传入cooki参数
实现思路:
1、理解http的GET和POST差别
(网上有很多关于此问题的内容,可以自己百度一下)
2、理解如何传cookie参数和值?
参考博客:http://kb.cnblogs.com/page/130970/#httpmeessagestructe
这个问题需要自己明白如何构建HTTP消息的结构,
Request 消息的结构, Request 消息分为3部分,
第一部分叫请求行,
第二部分叫http header,
第三部分是body.
header和body之间有个空行。
结构如下图
第一行中的Method表示请求方法,比如"POST","GET",
Path-to-resoure表示请求的资源,
Http/version-number 表示HTTP协议的版本号
当使用的是"GET" 方法的时候, body是为空的。
Response消息的结构, 和Request消息的结构基本一样。 同样也分为三部分,
第一部分叫request line,
第二部分叫request header,
第三部分是body. header和body之间也有个空行。
结构如下图
HTTP/version-number表示HTTP协议的版本号,
status-code 和message [状态代码]的详细解释。
根据上面内容,我们可以了解到http的规范,cookie内容属于request header内容,输入格式为: 参数:值;参数:值
需求第一步实现代码
1 # 获取页面uuid返回值 2 def uuid_no(prefix): 3 # 新建CookieJar实例,用于保存cookie 4 cj = cookielib.CookieJar() 5 # 处理cookie并生成opener 6 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 7 # 安装使用opener 8 urllib2.install_opener(opener) 9 # 测试账号 10 para = urllib.urlencode({'mobile': 13099999999}) 11 # url地址,通过makeUrl5方法获取 12 url = makeUrl5(prefix) 13 # Cookie内容 14 opener.addheaders.append(('Cookie', para)) 15 req = urllib2.Request(url) 16 req_result = urllib2.urlopen(req) 17 # CookieJar内容 18 print cj 19 for index, cookie in enumerate(cj): 20 # 获取uuid的值 21 uuid_str = cookie.value 22 return uuid_str
需求第二步实现代码
1 # 模拟登陆 2 def auth(prefix, user, passwd): 3 # 调用uuid_no函数,获取uuid 4 uuid_str = uuid_no(prefix) 5 para = urllib.urlencode({"Uuid": uuid_str}) 6 # cookie值包含mobile和uuid两部分 7 paras = para+";"+"mobile=13099999999" 8 paras = paras.lower() 9 # url地址,通过makeUrl6方法获取 10 url = makeUrl6(prefix) 11 opener = urllib2.build_opener() 12 opener.addheaders.append(('Cookie', paras)) 13 postdata = urllib.urlencode({"userId": user, "password": passwd}) 14 # post请求 15 f = opener.open(url, postdata) 16 # 获取返回值 17 the_page = f.read() 18 return the_page
python代码参考博客:http://www.dabu.info/python-auto-login-post-request-head.html