zoukankan      html  css  js  c++  java
  • requests库入门14-Cookie

     因为http是没有状态的协议,上一个请求和下一个请求是没有关联。但是现实中又需要有关联,比如一个页面某个操作需要登陆之后才能进行,没有登陆就提示你登陆。为了实现这样的效果,所以出现了Cookie和Session这两种机制。这里的Session是指http的一种机制,和requests的会话对象是两个东西。Session机制不太清楚就不写了。

    Cookie机制原理

    当浏览器第一次发送请求给服务器是没有带cookie的,当你登陆的时候,服务器会检查你的用户名和密码,发现确认有你这么一个用户,给出响应的同是,并给你设置一个cookie,浏览器收到服务器返回的cookie后,会解析并保存。之后再每次请求这个服务器的时候就会在请求头中把cookie带上,服务器会对这个cookie进行解析,发现是之前设置过的cookie,服务器就会给出响应。这样一个完整的交互流程就走完了。

    如果服务器并没有设置cookie的有效期,一般来说cookie是在保存在内存里,浏览器关闭的时候失效。如果服务器设置过cookie的的有效期长时间有效,浏览器会把cookie保存到本地。就像有一些网站会有一个选项,7天免登录啥的,那个就是设置cookie的有效期。

    在requests里,可以在请求中使用cookies参数来发送cookie到服务器,cookies参数需要指向一个dict。如果某些响应中带有cookie。可以使用cookies来打印得到的cookie

    来看代码示例,看下登录Github,然后获得返回的cookie

    先找到github登录界面,然后F12打开浏览器调试窗,然后输入错误的用户名密码,看下调试窗,左边Name叫做session的就是登录的请求

    登录界面:https://github.com/login

    登录接口地址是:https://github.com/seeion。

    最下面Form Data就是请求时提交的表单数据,最上面两个是固定不变的,中间的这个token是在打开登录界面时动态生成的。下面两个是用户名和密码

    也就是说,在我们打开登录界面的时候,会生成一个token。然后点击登录的时候,会把用户名,密码,token一起传过去

    那第一步就是获取登录界面自动生成的token

    import requests
    import re
    s = requests.session()#通过会话对象来登录,可以自动保存登录后过后的cookie等
    r = s.get('https://github.com/login')#请求登录界面
    resuit = r.text#获得登录界面的响应内容
    tokens = re.findall(r'<input type="hidden" name="authenticity_token" value="(.*?)" />', resuit)#通过正则得到登录界面响应内容中自动生成的token,生成的是个数组
    token = tokens[0]#只需要拿数组第一个字段
    print(token)

    成功拿到token之后,第二不就是把token放到请求头中,然后请求登录接口,成功之后就可以拿到返回的cookie了

    url = 'https://github.com/session'
    payloda = {'commit': 'Sign in',
               'utf8': '',
               'authenticity_token':token,
               'login':'usernmae',
               'password':'password'}
    r1 = s.post(url,data=payloda)
    print(r1.status_code)
    print(r1.text)
    print(r1.cookies)

    用户名和密码输入自己的github账号

    返回内容就不截图了,是登录成功后的首页html代码。可以看到cookie已经拿到了

  • 相关阅读:
    Jmeter性能监测及安装插件(推荐)
    测试用例使用传统excel还是思维导图(Xmind、MindManager等)?
    测试用例设计
    一个资深测试员的感悟
    log4j教程 10、PatternLayout
    log4j教程 9、HTMLLayout
    log4j教程 8、日志格式化
    log4j教程 7、日志记录级别
    log4j教程 6、Logger方法
    log4j教程 5、示例程序
  • 原文地址:https://www.cnblogs.com/myal/p/9337378.html
Copyright © 2011-2022 走看看