zoukankan      html  css  js  c++  java
  • 接口自动化之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
    

      

     

  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/weizhideweilai/p/9416501.html
Copyright © 2011-2022 走看看