import requests

url = "https://my.cheshi.com/user/"
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
}

res = requests.get(url, headers=headers)
print(res.text)

with open("cheshilogin.html", "a") as f:
    f.write(res.text)

执行代码,生成 HTML 文件:

打开可见:

学会Python Requests库+Cookies模拟自动登录!_User

但此刻显然是未登录的状态。咋让服务器识别出我们是登录的呢?就需要 cookie。

看此时登录态的网页 cookie:

不太清晰?换个形式:

学会Python Requests库+Cookies模拟自动登录!_Chrome_02

解析并传递 cookie

import requests

url = "https://my.cheshi.com/user/"
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
}

cookies = "传入你看到的登录态时的网页 cookie 值"
cookies = {item.split("=")[0]: item.split("=")[1] for item in cookies.split("; ")}
cookies = requests.utils.cookiejar_from_dict(cookies)

res = requests.get(url, headers=headers, cookies=cookies)

with open("cheshilogin.html", "w") as f:
    f.write(res.text)

再执行下,现在发现就进入了登录态页面:

Cookie + Session 实现登录并获取数据

不可能每次都自己登录下浏览器复制一下 cookie,如何自动获取 cookie 呢?

发现登录接口:

学会Python Requests库+Cookies模拟自动登录!_User_03

来看源码:

import requests

url = "https://api.cheshi.com/services/common/api.php?api=login.Login"
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"

}

data = {
    "act": "login",
    "mobile": "xxx",
    "source": "pc",
    "password": "xxx",
    "hold_time": "yes"
}

res = requests.post(url, data=data, headers=headers)

admin_url = "https://my.cheshi.com/user/"
admin_res = requests.get(admin_url, headers=headers, cookies=res.cookies)

with open("cheshilogin2.html", "w") as f:
    f.write(admin_res.text)

执行代码,打开生成的文件:

学会Python Requests库+Cookies模拟自动登录!_User_04

学到了什么?

这段代码的作用是模拟用户登录"https://api.cheshi.com/services/common/api.php?api=login.Login"网站,并获取用户的个人信息页面"https://my.cheshi.com/user/"。通过这段代码,可以了解到以下几个方面的内容:

  1. 登录网站的流程和数据格式:通过查看代码中的请求数据和响应数据,可以了解到登录网站的流程和数据格式,包括需要提交的用户名、密码等信息,以及服务器返回的响应数据格式。
  2. 网站的安全性:通过查看代码中的请求头和请求数据,可以了解到网站的安全性问题,包括请求头中的User-Agent信息,以及请求数据中的用户名、密码等信息是否明文传输。
  3. 网站的接口规范:通过查看代码中的请求URL,可以了解到网站的接口规范,包括请求URL中的参数和接口名称等信息。
  4. 网站的接口返回数据:通过查看代码中的响应数据,可以了解到网站的接口返回数据,包括用户的个人信息、登录状态等信息。

从这些方面来看,这段代码可以作为一个参考,用于学习和模拟网站的登录和数据获取流程。但是,在实际应用中,应该注意以下几点:

  1. 遵守网站的安全性要求:在发送请求时,应该遵守网站的安全性要求,包括使用HTTPS协议、使用安全的请求头、使用安全的请求数据等。
  2. 保护用户的敏感信息:在实际应用中,应该保护用户的敏感信息,包括使用加密传输、使用安全的存储方式等。
  3. 遵守网站的使用规范:在使用网站的接口时,应该遵守网站的使用规范,包括遵守接口的参数和返回数据格式、遵守接口的调用频率等。

session 封装 cookie

import requests

url = "https://api.cheshi.com/services/common/api.php?api=login.Login"
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"

}

data = {
    "act": "login",
    "mobile": "13236519712",
    "source": "pc",
    "password": "970722sss",
    "hold_time": "yes"
}

session = requests.session()
session.post(url, data=data, headers=headers)

admin_url = "https://my.cheshi.com/user/"
admin_res = session.get(admin_url, headers=headers)

with open("cheshilogin3.html", "w") as f:
    f.write(admin_res.text)