Requests模拟登陆的三种方式

首先了解一下cookie与session:

参考文章:https://blog.csdn.net/Auuuuuuuu/article/details/79977466

 

1.实例化session,使用session发送post请求,再使用session获取登录后的页面

requests提供了一个叫session的类,来实现客户端和服务端的会话保持

使用方法:

 1.1 实例化一个session对象

 1.2让session发送get或post请求

代码:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_


import  requests

session = requests.session()  #实例化session对象

post_url = "登录地址"
post_data = {"登录需要的post数据"}
headers = {      #请求头
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36"}

#使用session发送post请求,cookie保存在其中
session.post(post_url,post_data,headers=headers)

#再使用session请求登录后才能访问的地址
r = session.get("url地址",headers=headers)

# 保存页面
with open("登录页面.html","w",encoding="utf-8") as f:
    f.write(r.content.decode())

 

2.headers中添加cookie键,值为cookie字符串

直接添加cookie模拟登陆

代码:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import  requests


headers = {      #请求头
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36"
    "cookie":"对应的值"
}



r = requests.get("url地址",headers=headers)

# 保存页面
with open("登录页面2.html","w",encoding="utf-8") as f:
    f.write(r.content.decode())

 

3.在请求方法中添加cookies参数,接受字典形式的cookie,字典形式的cookie中的键是cookie的name对应的值,值是cookie的value

将cookie字符串转换成字典形式

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import  requests


headers = {      #请求头
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36"
    "cookie":"对应的值"
}

cookies = "cookie字符串"
#使用字典推导式  首先用分号+空格分割,再根据等号进行分割
cookies ={i.split("=")[0]:i.split("=")[1] for i in cookies.split("; ")}


r = requests.get("url地址",headers=headers,cookies=cookies)

# 保存页面
with open("登录页面2.html","w",encoding="utf-8") as f:
    f.write(r.content.decode())

 

什么时候直接使用cookie登陆:

1.cookie过期时间很长的网站

2.在cookie过期之前能拿到所需要的数据

3.配合其它程序使用,其它程序专门获取cookie,当前程序专门请求页面

你可能感兴趣的:(编程,python)