爬虫 | 基于 requests 实现加密 POST 请求发送与身份验证

本文介绍了一个使用Python编写的脚本,通过MD5加密生成POST请求的签名,以便与特定网络服务交互并进行身份验证,涉及到requests库的使用和请求头设置。
摘要由CSDN通过智能技术生成

Hi,大家好,我是半亩花海。本项目旨在实现一个简单的 Python 脚本,用于向指定的 URL 发送 POST 请求,并通过特定的加密算法生成请求头中的签名信息。这个脚本的背后是与某个特定的网络服务交互,发送特定格式的 JSON 数据,并通过生成的签名进行身份验证


目录

一、项目功能

二、注意事项

三、代码解析

1. 导入必要的库

2. 定义签名生成函数

3. 构造请求数据

4. 设置请求头

5. 发送 POST 请求

6. 打印响应结果

四、结果展示

五、完整代码


一、项目功能

  • 发送 POST 请求到指定的 URL。
  • 构造请求头,其中包括特定的签名信息,用于身份验证。
  • 使用 MD5 算法对特定格式的数据进行加密,并将加密结果作为请求头的一部分。

二、注意事项

  • 在运行代码之前,请确保安装了相应的 Python 库,特别是 requests 库。
  • 由于代码中大部分请求头信息都被注释掉了,使用时需要根据实际情况取消注释。
  • 此项目仅供学习和演示用途,使用时应遵守相关网站的使用规定和法律法规。

三、代码解析

1. 导入必要的库

import requests
from hashlib import md5
  • 使用 requests 库发送 HTTP 请求。
  • 导入 md5 函数用于进行 MD5 加密。

2. 定义签名生成函数

def u(t):
    o = '9SASji5OWnG41iRKiSvTJHlXHmRySRp1'
    result = t.lower() + '&' + o.lower()
    return md5(result.encode()).hexdigest()
  • 定义了一个名为 u 的函数,用于生成签名信息。
  • 使用一个固定的字符串 o 作为加密的盐值。
  • 将传入的字符串 t 与盐值拼接后,将其转换为小写,并使用 MD5 算法进行加密,最终返回加密后的结果。

3. 构造请求数据

data = '{"keyword":"","provinceNames":[],"natureTypes":[],"eduLevel":"","categories":[],"features":[],"pageIndex":4,' \
       '"pageSize":20,"sort":11} '
  • 构造了一个 JSON 格式的字符串,作为 POST 请求的正文内容。

4. 设置请求头

headers = {
    'Content-Type': 'application/json',
    'u-sign': u(data),
}
  • 设置了请求头,其中包括了 Content-Typeu-sign
  • Content-Type 指定了请求正文的格式为 JSON。
  • u-sign 使用了前面定义的签名生成函数 u(data),将生成的签名信息添加到请求头中。

5. 发送 POST 请求

url = 'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query'
response = requests.post(url, headers=headers, data=data)
  • 指定了要发送请求的 URL。
  • 使用 requests.post 方法发送 POST 请求,并将返回的响应保存在 response 变量中。

6. 打印响应结果

print(response.json())
  • 使用 response.json() 方法将响应结果转换为 JSON 格式,并打印出来。

四、结果展示

整个代码就完成了一个完整的加密 POST 请求的发送过程,包括了生成签名信息、构造请求数据、设置请求头、发送请求以及处理响应结果等步骤。

这个小项目展示了如何使用 Python 中的 requests 库发送 HTTP 请求,并在请求头中加入签名信息进行身份验证。同时,通过对数据进行 MD5 加密,增强了数据传输的安全性。


五、完整代码

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import requests
from hashlib import md5


def u(t):
    o = '9SASji5OWnG41iRKiSvTJHlXHmRySRp1'
    result = t.lower() + '&' + o.lower()
    return md5(result.encode()).hexdigest()


data = '{"keyword":"","provinceNames":[],"natureTypes":[],"eduLevel":"","categories":[],"features":[],"pageIndex":4,' \
       '"pageSize":20,"sort":11} '

headers = {
    # 'Connection': 'keep-alive',
    # 'Content-Length': '132',
    'Content-Type': 'application/json',
    # 'Host': 'uwf7de983aad7a717eb.youzy.cn',
    # 'Origin': 'https://pv4y-pc.youzy.cn',
    # 'Referer': 'https://pv4y-pc.youzy.cn/',
    # 加密的数据
    'u-sign': u(data),
    # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
    # Chrome/103.0.0.0 Safari/537.36'
}

url = 'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query'
response = requests.post(url, headers=headers, data=data)
print(response.json())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半亩花海

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值