黑色小鱼 2021-09-02 22:17 采纳率: 25%
浏览 136

利用python实现我在校园的签到,返回值是{"code":500,"message":"服务出错(500)"}

已经利用sesson前期登入,并且获得当天的其他信息,但是依旧打卡失败{"code":500,"message":"服务出错(500)"}
以下内容仅作为学习用途,私人信息已经删去,需要信息检验的可以联系

res.requests.headers = {
'User-Agent': 'xxxxxxxxxx',  # 表头是手机抓包抓到的
'Accept-Encoding': 'gzip, deflate, br', 
'Accept': '*/*', 'Connection': 'keep-alive', 
'Host': 'student.wozaixiaoyuan.com', 
'content-type': 'application/json', 
'Cookie': 'JWSESSION=xxxxxxxxxxxxxxxxxxxxxx',   # 这个健康打卡,日检日报成功
'Content-Length': '267'
}

传入的数据是

self.sign_data = {
            "id": "xxxxxxx",   #   爬取到当天的最新值
            "signId": "xxxxxxx",    #   爬取到当天的最新值
# 剩下的数据是上次抓包抓到的
            "latitude": "xxx",
            "longitude": "xxx",
            "country": "中国",
            "province": "xxx",
            "city": "xxx",
            "district": "xxxx",
            "township": "xxx"
        }

程序如下是

import requests
import json
import time


class auto_web:
    def __init__(self, username, password):
        # 保留登录信息
        self.session = requests.session()
        self.cookies = None

        # 登入界面的post信息
        self.login_url = 'https://gw.wozaixiaoyuan.com/basicinfo/mobile/login/username'
        self.login_data = {
            'username': username,
            'password': password
        }
        self.login_headers = {
            'Host': 'gw.wozaixiaoyuan.com',
            'Connection': 'keep-alive',
            'Content-Length': '2',
            'Accept': 'application/json, text/plain, */*',
            'User-Agent': 'xxxxxxxxxxx',
            'Content-Type': 'application/json;charset=UTF-8',
            'Sec-Fetch-Site': 'same-origin',
            'Sec-Fetch-Mode': 'cors',
            'Sec-Fetch-Dest': 'empty',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-us,en'
        }

        # 签到的post信息
        self.sign_url = 'https://student.wozaixiaoyuan.com/sign/doSign.json'
        self.sign_headers = {
            'Host': 'student.wozaixiaoyuan.com',
            'Connection': 'keep-alive',
            'User-Agent': 'xxxxxxxxxxx',
            'content-type': 'application/json',
            'Accept-Encoding': 'gzip, deflate, br',
        }
        self.sign_data = {
            "id": "",
            "signId": "",
            "latitude": "xxxxxxxxxxx",
            "longitude": "xxxxxxxxxxx",
            "country": "中国",
            "province": "xxxxxxxxxxx",
            "city": "xxxxxxxxxxx",
            "district": "xxxxxxxxxxx",
            "township": "xxxxxxxxxxx"
        }
        # 获得getSignMessage的信息
        self.getSignMessage_url = 'https://student.wozaixiaoyuan.com/sign/getSignMessage.json'
        self.getSignMessage_headers = {
            'Host': 'student.wozaixiaoyuan.com',
            'Connection': 'keep-alive',
            'User-Agent': 'xxxxxxxxxxx',
            'content-type': 'application/x-www-form-urlencoded',   # 注意,这个不是application/json
            'Accept-Encoding': 'gzip, deflate, br'
        }
        self.getSignMessage_data = {
            "page": "1",
            "size": "5"
        }
        # 获得

    def login(self):  # 登入账号
        self.login_url = self.login_url + "?username=" + str(self.login_data['username']) + "&password=" + str(
            self.login_data['password'])  # 通过 url 的 '?' 方法写入参数
        res = self.session.post(url=self.login_url, headers=self.login_headers, data='{}')
        try:
            if json.loads(res.text)['code'] == 0:
                self.session.cookies.set('JWSESSION', res.headers['JWSESSION'])  # 更新JWSESSION值
                # print(res.cookies)
                print('登录成功')
                # self.updata_headers(res)
            else:
                print(json.loads(res.text)['message'])
        except:
            print('登录错误')

    def get_sign_inf(self):
        print('************')
        SignMessage = self.session.post(url=self.getSignMessage_url, headers=self.getSignMessage_headers, data=self.getSignMessage_data)
        SignMessage_date = json.loads(SignMessage.text)['data'][0]['end'].split(' ')[0]
        # 填充当天签到的信息
        if time.strftime("%Y-%m-%d") == SignMessage_date:
            print(SignMessage.request.headers)
            id = json.loads(SignMessage.text)['data'][0]['id']
            logId = json.loads(SignMessage.text)['data'][0]['logId']
            self.sign_data['id'] = logId
            self.sign_data['signId'] = id

    def sign(self):  # 签到
        try:
            res = self.session.post(url=self.sign_url, headers=self.sign_headers, data=self.sign_data)
            if json.loads(res.text)['code'] == 0:
                print('签到成功')
            else:
                print(res.text)
                print(res.request.headers)
                print('签到失败:{}'.format(json.loads(res.text)['message']))
        except:
            print('签到错误')

    def run(self):
        self.login()
        self.get_sign_inf()
        self.sign()


if __name__ == '__main__':
    obj = auto_web('xxxxxxxxxxx', 'xxxxxxxxxxx')
    obj.run()

抓到的打卡成功表单如下

img

  • 写回答

4条回答 默认 最新

  • ugvibib 2021-09-02 23:33
    关注

    500是服务端异常的意思
    可能是你请求时传的参数不对,有些值服务端没有做处理就500了

    评论

报告相同问题?

问题事件

  • 修改了问题 9月3日
  • 创建了问题 9月2日

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码