接口自动化之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

  

 

原文地址:https://www.cnblogs.com/weizhideweilai/p/9416501.html