• 接口自动化之cookies/session


    现在有很多网站有验证码,跳过验证码实现登录可以使用cookies登录

    目录

    1、requests的添加cookies的方法

    2、添加cookies保持登录

    3、使用session保持登录

    1、requests的添加cookies的方法

    requests库里面有个对cookies进行专门处理的类,用法如下:

    coo = requests.cookies.RequestsCookieJar()                       #调用处理cookies的这个jar包

    coo.set('cookie-name', 'cookie-value', path='/', domain='.xxx.com')  #进行cookies的添加

    cookies.update()      #追加cookies后,需要做一个更新操作

     

    2、添加cookies保持登录

    方法一:手动抓取cookies然后添加

    实现登录操作如下:

    第一步:方法登录前页面,获取部分cookies

    url2="http://mysrc.sinaapp.com/accounts/login/"
    s=requests.session()
    r=s.get(url2)
    

     第二步:调用cookies的jar包,来添加cookies,特别的,我们不知道需要添加哪些cookies时,可以通过fiddler来对比,登录后比登录前多了什么

    c=requests.cookies.RequestsCookieJar()
    
    #域名一定要填写,不然会报错
    c.set('csrftoken','JIrj423TaumVWIym5TT0Gy0uAybmSAWi',path='/', domain='mysrc.sinaapp.com')
    c.set('sessionid','4831409ded4f674da3af33625b99e7e7',path='/', domain='mysrc.sinaapp.com')
    #更新一下cookies
    s.cookies.update(c)
    

     登录前:

     登录后:

    第三步:访问需要登录的接口

    data1={
        "search_text":"1",
        "page":"1"
    }
    url1="http://mysrc.sinaapp.com/search/"
    r1=s.post(url1,data=data1)
    

      这个时候可以看到,访问的内容是登录后

    完整代码:

    # coding:utf-8
    
    import requests
    
    url2="http://mysrc.sinaapp.com/accounts/login/"
    s=requests.session()
    r=s.get(url2)
    
    #使用cookies的set方法将cookies信息填进去
    c=requests.cookies.RequestsCookieJar()
    print s.cookies
    #域名一定要填写,不然会报错
    c.set('csrftoken','JIrj423TaumVWIym5TT0Gy0uAybmSAWi',path='/', domain='mysrc.sinaapp.com')
    c.set('sessionid','4831409ded4f674da3af33625b99e7e7',path='/', domain='mysrc.sinaapp.com')
    #更新一下cookies
    s.cookies.update(c)
    print s.cookies
    
    data1={
        "search_text":"1",
        "page":"1"
    }
    url1="http://mysrc.sinaapp.com/search/"
    r1=s.post(url1,data=data1)
    print s.cookies
    print r1.content
    

     方法二:使用cookies.get_dict()方法获取所有的cookies,传给需要登录的请求

    import requests
    
    url="xx:8080/jpress/admin/login"
    headers={
    "Content-Type": "application/x-www-form-urlencoded"}
    body={"username":"admin",
          "password":"123456",
          "remember_me":"on"}
    p=requests.post(url=url,headers=headers,data=body)
    print(p.json())
    all_cookies=p.cookies.get_dict()
    urls="xx:8080/jpress/admin/content/save"
    body={"content.status":"nomal",
          "content.module":"article",
         "content.slug":"new",
          "content.title":"new",
          "ucode":"9e4152533ae7a1d4246fed47acc8c463",
          "content.text":"new"}
    q=requests.post(urls,body,headers=headers,cookies=all_cookies)
    print(q.json)
    

      

    3、使用session保持登录

    第一步:写一个登录函数,使用账号密码完成登录,使用requests的session会话对象保持登录

    Login.py
    import requests
    
    class Login():
        def login(self):
            url="http://xx:8080/jpress/admin/login"
            headers={
            "Content-Type": "application/x-www-form-urlencoded"
            }
            body={"username":"admin",
                  "password":"123456"}
            s=requests.session()
            p=s.post(url,headers=headers,data=body)
            return s
    

      

    第二步:直接调用登录函数,会话中自动保持登录

    from m_module.login_api import Login
    import requests
    
    class Topicadd():
        def __init__(self):
            self.s=Login().login()
    
        def add(self,data1,data2,data3):
            headers={
            "Content-Type": "application/x-www-form-urlencoded"
            }
            urls="http://139.129.88.36:8080/jpress/admin/content/save"
            body={"content.status":"nomal",
                  "content.module":"article",
                 "content.slug":data1,
                  "content.title":data2,
                  "ucode":"9e4152533ae7a1d4246fed47acc8c463",
                  "content.text":data3}
            p=self.s.post(urls,body,headers=headers)
            return p
    

      

     

  • 相关阅读:
    【锁】java 锁的技术内幕
    【BlockingQueue】BlockingQueue 阻塞队列实现
    【多线程】获取多个线程任务执行完事件
    【spring cloud】源码分析(一)
    【spring boot】FilterRegistrationBean介绍
    【FAQ】服务下线
    解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
    实现人民币大写代码解析
    application.yml使用@符合问题:'@' that cannot start any token. (Do not use @ for indentation)
    Maven常见异常及解决方法---测试代码编译错误
  • 原文地址:https://www.cnblogs.com/weizhideweilai/p/9416501.html
Copyright © 2020-2023  润新知