def check(self): """ 检查权限情况 -1: csrf 校验失败 -2: SESSDATA值有误 -3: 未提供SESSDATA :return: """ ret = {"code": -2, "message": ""} if not self.has_sess(): ret["code"] = -3 ret["message"] = "未提供SESSDATA" else: api = "https://api.bilibili.com/x/web-interface/archive/like" data = {"bvid": "BV1uv411q7Mv", "like": 1, "csrf": self.csrf} req = requests.post(url=api, data=data, cookies=self.get_cookies()) if req.ok: con = req.json() if con["code"] == -111: ret["code"] = -1 ret["message"] = "csrf 校验失败" elif con["code"] == -101 or con["code"] == -400: ret["code"] = -2 ret["message"] = "SESSDATA值有误" else: ret["code"] = 0 ret["message"] = "0" else: raise exceptions.NetworkException(req.status_code) return ret
def request(method: str, url: str, params=None, data=None, cookies=None, headers=None, data_type: str = "form", **kwargs): if params is None: params = {} if data is None: data = {} if cookies is None: cookies = {} if headers is None: headers = copy.deepcopy(DEFAULT_HEADERS) if data_type.lower() == "json": headers['Content-Type'] = "application/json" st = { "url": url, "params": params, "cookies": cookies, "headers": headers, "verify": request_settings["use_https"], "data": data, "proxies": request_settings["proxies"] } st.update(kwargs) req = requests.request(method, **st) if req.ok: content = req.content.decode("utf8") if req.headers.get("content-length") == 0: return None if 'jsonp' in params and 'callback' in params: con = json.loads(re.match(".*?({.*}).*", content, re.S).group(1)) else: con = json.loads(content) if con["code"] != 0: if "message" in con: msg = con["message"] elif "msg" in con: msg = con["msg"] else: msg = "请求失败,服务器未返回失败原因" raise exceptions.BilibiliException(con["code"], msg) else: if 'data' in con.keys(): return con['data'] else: if 'result' in con.keys(): return con["result"] else: return None else: raise exceptions.NetworkException(req.status_code)