知乎登录来学习cookie和sessions

╄→гoц情女王★ 提交于 2020-04-16 11:32:31

【推荐阅读】微服务还能火多久?>>>

简单的学习http.cookiejar的使用,因为浏览器与服务器直接连接是非连续的,我们没连接一次,服务器认证一次返回数据。那问题来了,每次连接都需要认证一番!这个时候cookie就是解决这个问题,一用户多次登录同网站页面认证问题的,每次连接都把cookie的小文本传去就可以登录。

这个过程中,cookie是存放在用户浏览器里面的,浏览器与服务器端直接传输cookie的用户名,密码等是非常不安全的,那session就能很好解决。session是存放到服务器端,cookie中存放一个session_key,在通过session_key到服务器端查找存放的用户、密码、cookie过期时间等。这样就要安全非常多了。

在写爬虫过程中,我们需要多次连接的就用session来连接,把cookie存起来,每次连接都用他。

import re,requests
from lxml import etree
import http.cookiejar as cookielib

user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
header ={
    'Host':'www.zhihu.com',
    'Origin':'https://www.zhihu.com',
    'Referer':'https://www.zhihu.com/',
    'User-Agent':user_agent
}
session = requests.Session()
session.cookies = cookielib.LWPCookieJar(filename = "zhihu_cookie.txt")
#获得xsrf
def get_xsrf():
    response = session.get('https://www.zhihu.com/#signin',headers = header)
    xsrf_html = etree.HTML(response.content.decode('utf-8'))
    xsrf_code = xsrf_html.xpath('//form/input[contains(@name,"_xsrf")]/@value')[0]
    return xsrf_code
#判断是否登录
def is_login():
    try:
        session.cookies.load(filename="zhihu_cookie.txt",ignore_discard=True)
    except:
        print("cookie 加载错误!")
    inbox_url = "https://www.zhihu.com/inbox"
    response = session.get(inbox_url,headers = header)
    if response.status_code != 200:
        return False
    else:
        return True
def zhihu_login(account,password):
    #判断是手机登录还是邮件登录
    if re.match("^1\d{10}",account):
        print("手机登录")
        post_url = 'https://www.zhihu.com/login/phone_num'
        post_data ={
            '_xsrf':get_xsrf(),
            'password':password,
            'captcha_type':'cn',
            'phone_num':account
        }
    else:
        if "@" in account:
            post_url = 'https://www.zhihu.com/login/email'
            post_data ={
                '_xsrf':get_xsrf(),
                'password':password,
                'captcha_type':'cn',
                'email':account
            }
    response = session.post(post_url,data = post_data,headers =header)
    session.cookies.save()

if is_login():
    print("cookie 登录")
else:
    #输入用户名和密码,下面是错误的
    zhihu_login("15211111111","111111111")
 

http.cookiejar模块定义了以下类: class http.cookiejar.FileCookieJar(filename,delayload=None,policy=None) FileCookieJar对象实现以下额外方法 把cookie保存到文件 FileCookieJar.save(filename=None,ignore_discard=False,ignore_expires=False)

从文件中读取cookie FileCookieJar.load(filename=None,ignore_discard=False,ignore_expires=False)

FileCookieJar的子类 class http.cookiejar.MozillaCookieJar(filename,delayload=None,policy=None) class http.cookiejar.LWPCookieJar(filename,de layload=None,policy=None)

这种FileCookieJar能以the libwww-perl library’s Set-Cookie3 文件形式把cookie存取到磁盘上。 我的博客地址: https://www.nigaea.com/dataanalysis/173.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!