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
View Code

 

 需求第二步实现代码

 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
View Code

 

python代码参考博客:http://www.dabu.info/python-auto-login-post-request-head.html

posted @ 2016-01-07 16:29  shhnwangjian  阅读(2568)  评论(0编辑  收藏  举报