# Python3利用http.cookiejar完成cookie操作模拟

- Link: https://www.xuepaijie.com/html/skill/devops/800.html
- Published: 2017-02-06T15:03:52+08:00
- Author: Admin

有的网站需要登陆才能抓取到网站的数据，那么光模拟浏览器请求网站内容是还不够了，还
需要能够模拟用户登陆网站，然后保留登陆状态，获取网站相关的内容。

想要成功模拟真实用户登陆，重点要找到登录时候提交表单都包含了哪些真实的数据。然后
使用Python生成这些数据，携带在请求头信息当中，这样服务器就能当做正常的访客，返回
正确的信息。一般需要携带cookie，post表单数据即可，成功通过验证后，可以访问其他需要
登录才可以获取的内容。

    ```html;
    url = 'http://www.a.com/login'
    ```

然后就是构造信息字典了，需要提交的信息主要有：用户名(user)、密码(pass)，将这些信息
写在一个字典变量中：

    ```html;
    params = {
    "user": username,
    "pass": password
    }
    ```

登录后我们可以获取代码看下可成功了。

另外需要用到处理cookie的模块http.cookiejar，先创建一个CookieJar类，然后在请求的时候
传递，看看官方的例子：

    ```html;
    cj = http.cookiejar.CookieJar()
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
    r = opener.open("http://www.a.com/")
    ```

使用起来非常简单，基本直接可以用了。

下面来看看完整的代码吧：

    ```html;
    import urllib.request
    import random
    import http.cookiejar
    import urllib.parse

    url = 'http://www.a.com/login'
    username = 'admin'
    password = '*******'

    params = {
    "user": username,
    "pass": password
    }

    cookie = http.cookiejar.CookieJar()

    openner=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
    openner.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')]

    data = urllib.parse.urlencode(params).encode()
    r= openner.open(url,data)
    r=openner.open("http://www.a.com/admin/index")

    f = open('test.html', 'w', encoding = 'utf-8')
    f.write(r.read().decode())
    f.close()
    ```
