这个代码主要用于模拟在微博超话(微博上的某个特定话题)中的签到操作。下面是对代码的详细分析:
-
导入必要的库:
hashlib
:用于生成SHA-512哈希值。requests
:用于发送HTTP请求。
-
常量定义:
KEY2
:定义一个常量字符串"10BA195010"
,用作生成哈希值的部分密钥。
-
函数
converByte2Int
:- 该函数将字节(ASCII码)转换为对应的整数值。如果字节值代表一个数字字符('0'-'9'),则减去48;如果是大写字母('A'-'F'),则减去55;如果是小写字母('a'-'f'),则减去87。
-
函数
getS
:- 接受一个用户ID(
UID
),生成一个字符串KEY1
,其中包含UID
和KEY2
。 - 对
KEY1
和KEY2
分别进行SHA-512哈希,生成key1_s
和key2_s
。 - 通过一个循环生成最终的签名字符串
ret
。每次循环中,通过key2_s
中的某个字符的ASCII码(经过converByte2Int
转换),确定key1_s
中的某个字符,并将其添加到ret
中。 - 最终返回生成的签名字符串
ret
。
- 接受一个用户ID(
-
函数
qiandao
:- 接受用户ID(
uid
)、用户会话ID(gsid
)和超话ID(pagid
)。 - 通过
getS
函数生成签名字符串s
。 - 定义请求头,其中包括
User-agent
信息。 - 构建签到请求的URL,URL中包含多个参数(如
pagid
、KEY2
、gsid
、s
等)。 - 通过
requests.get
发送GET请求,进行签到操作。 - 输出服务器响应结果。
- 接受用户ID(
-
主函数:
- 设置用户ID(
uid
)、用户会话ID(gsid
)和超话ID(pagid
)。 - 调用
qiandao
函数进行签到操作。
- 设置用户ID(
这个代码主要功能是通过模拟HTTP请求的方式在微博超话中进行签到,生成特定的签名字符串来绕过可能的验证机制。以下是代码的核心部分示例调用:
import hashlib
import requests
KEY2 = "10BA195010"
def converByte2Int(b):
if b - 48 <= 9: return b - 48
if b - 65 > 5: return b - 87
return b - 55
def getS(UID):
KEY1 = "5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo%s%s" % (UID, KEY2)
key1_s = hashlib.sha512(KEY1.encode('utf-8')).hexdigest()
key2_s = hashlib.sha512(KEY2.encode('utf-8')).hexdigest()
ret = ""
j = 0
for _ in range(8):
k = converByte2Int(ord(key2_s[j]))
j += k
ret += key1_s[j]
return ret
def qiandao(uid, gsid, pagid):
s = getS(uid)
headers = {
"User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36",
}
url = 'https://api.weibo.cn/2/page/button?request_url=http%3A%2F%2Fi.huati.weibo.com%2Fmobile%2Fsuper%2Factive_checkin%3Fpageid%3D' + pagid + '%26in_page%3D1&networktype=wifi&extparam=LESSERAFIM&accuracy_level=0&uicode=10000011&moduleID=700&wb_version=5256&c=android&s=' + s + '&ft=0&ua=samsung-SM-G988N__weibo__11.10.1__android__android5.1.1&wm=5311_4002&from=' + KEY2 + '&gsid=' + gsid + '&lang=zh_CN&skin=default&sflag=1&oriuicode=10000010_10000003_10000003&luicode=10000003&android_id=ff9a650dd21bce91'
resp = requests.get(url=url, headers=headers)
print(resp.text)
if __name__ == "__main__":
uid = "用户id"
gsid = "" #sub
pagid = "10080892b1f367dec8ee89a39109d0b5fe9c0d" #超话id
qiandao(uid, gsid, pagid)
python
复制代码
if __name__ == "__main__": uid = "用户id" # 请替换为实际的用户ID gsid = "" # 请替换为实际的会话ID pagid = "10080892b1f367dec8ee89a39109d0b5fe9c0d" # 请替换为实际的超话ID qiandao(uid, gsid, pagid)
调用qiandao
函数时,需要传入实际的用户ID、会话ID和超话ID。