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 文件:
打开可见:

但此刻显然是未登录的状态。咋让服务器识别出我们是登录的呢?就需要 cookie。
看此时登录态的网页 cookie:
不太清晰?换个形式:

解析并传递 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 呢?
发现登录接口:

来看源码:
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)执行代码,打开生成的文件:

学到了什么?
这段代码的作用是模拟用户登录"https://api.cheshi.com/services/common/api.php?api=login.Login"网站,并获取用户的个人信息页面"https://my.cheshi.com/user/"。通过这段代码,可以了解到以下几个方面的内容:
- 登录网站的流程和数据格式:通过查看代码中的请求数据和响应数据,可以了解到登录网站的流程和数据格式,包括需要提交的用户名、密码等信息,以及服务器返回的响应数据格式。
- 网站的安全性:通过查看代码中的请求头和请求数据,可以了解到网站的安全性问题,包括请求头中的User-Agent信息,以及请求数据中的用户名、密码等信息是否明文传输。
- 网站的接口规范:通过查看代码中的请求URL,可以了解到网站的接口规范,包括请求URL中的参数和接口名称等信息。
- 网站的接口返回数据:通过查看代码中的响应数据,可以了解到网站的接口返回数据,包括用户的个人信息、登录状态等信息。
从这些方面来看,这段代码可以作为一个参考,用于学习和模拟网站的登录和数据获取流程。但是,在实际应用中,应该注意以下几点:
- 遵守网站的安全性要求:在发送请求时,应该遵守网站的安全性要求,包括使用HTTPS协议、使用安全的请求头、使用安全的请求数据等。
- 保护用户的敏感信息:在实际应用中,应该保护用户的敏感信息,包括使用加密传输、使用安全的存储方式等。
- 遵守网站的使用规范:在使用网站的接口时,应该遵守网站的使用规范,包括遵守接口的参数和返回数据格式、遵守接口的调用频率等。
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)
















