def get_req_resp_record(self, resp_obj): """ get request and response info from Response() object. """ def log_print(req_resp_dict, r_type): msg = "\n================== {} details ==================\n".format( r_type) for key, value in req_resp_dict[r_type].items(): msg += "{:<16} : {}\n".format(key, repr(value)) logger.log_debug(msg) req_resp_dict = {"request": {}, "response": {}} # record actual request info req_resp_dict["request"]["url"] = resp_obj.request.url req_resp_dict["request"]["headers"] = dict(resp_obj.request.headers) request_body = resp_obj.request.body if request_body: request_content_type = lower_dict_keys( req_resp_dict["request"]["headers"]).get("content-type") if request_content_type and "multipart/form-data" in request_content_type: # upload file type req_resp_dict["request"][ "body"] = "upload file stream (OMITTED)" else: req_resp_dict["request"]["body"] = request_body # log request details in debug mode log_print(req_resp_dict, "request") # record response info req_resp_dict["response"]["ok"] = resp_obj.ok req_resp_dict["response"]["url"] = resp_obj.url req_resp_dict["response"]["status_code"] = resp_obj.status_code req_resp_dict["response"]["reason"] = resp_obj.reason req_resp_dict["response"]["cookies"] = resp_obj.cookies or {} req_resp_dict["response"]["encoding"] = resp_obj.encoding resp_headers = dict(resp_obj.headers) req_resp_dict["response"]["headers"] = resp_headers lower_resp_headers = lower_dict_keys(resp_headers) content_type = lower_resp_headers.get("content-type", "") req_resp_dict["response"]["content_type"] = content_type if "image" in content_type: # response is image type, record bytes content only req_resp_dict["response"]["content"] = resp_obj.content else: try: # try to record json data req_resp_dict["response"]["json"] = resp_obj.json() except ValueError: # only record at most 512 text charactors resp_text = resp_obj.text req_resp_dict["response"]["text"] = omit_long_data(resp_text) # log response details in debug mode log_print(req_resp_dict, "response") return req_resp_dict
def test_lower_dict_keys(self): request_dict = { "url": "http://127.0.0.1:5000", "METHOD": "POST", "Headers": {"Accept": "application/json", "User-Agent": "ios/9.3"}, } new_request_dict = utils.lower_dict_keys(request_dict) self.assertIn("method", new_request_dict) self.assertIn("headers", new_request_dict) self.assertIn("Accept", new_request_dict["headers"]) self.assertIn("User-Agent", new_request_dict["headers"]) request_dict = "$default_request" new_request_dict = utils.lower_dict_keys(request_dict) self.assertEqual("$default_request", request_dict) request_dict = None new_request_dict = utils.lower_dict_keys(request_dict) self.assertEqual(None, request_dict)
def test_lower_dict_keys(self): request_dict = { "url": "http://127.0.0.1:5000", "METHOD": "POST", "Headers": { "Accept": "application/json", "User-Agent": "ios/9.3" } } new_request_dict = utils.lower_dict_keys(request_dict) self.assertIn("method", new_request_dict) self.assertIn("headers", new_request_dict) self.assertIn("Accept", new_request_dict["headers"]) self.assertIn("User-Agent", new_request_dict["headers"]) request_dict = "$default_request" new_request_dict = utils.lower_dict_keys(request_dict) self.assertEqual("$default_request", request_dict) request_dict = None new_request_dict = utils.lower_dict_keys(request_dict) self.assertEqual(None, request_dict)
# enc_t=chardet.detect(s_t)["encoding"] # if( enc_t!=None and "utf" in enc_t): # s=s_t.decode(enc_t) # else: # s=s_t.decode(enc) s = arg.strip() if opt in ("-h", "--help"): print_usage(argv) sys.exit(1) elif opt in ("-c", "--config"): config = s return config if __name__ == "__main__": #测试用 if (len(sys.argv) == 1): sys.argv += ["-c"] + ["./yusys_new.yaml"] configfile = get_opts(sys.argv) config_dic = utils.FileUtils.load_file(configfile) config_dic = utils.lower_dict_keys(config_dic[0]["config"]) logger.setup_logger("info", config_dic["logfile"]) logger.log_debug(str(config_dic)) connect_browser(config_dic) sys.stdout.close() sys.stderr.close() sys.exit(0) # driver.quit()
def get_req_resp_record(resp_obj: Response) -> ReqRespData: """ get request and response info from Response() object. """ def log_print(req_or_resp, r_type): msg = f"\n================== {r_type} details ==================\n" for key, value in req_or_resp.dict().items(): if isinstance(value, dict): value = json.dumps(value, indent=4) msg += "{:<8} : {}\n".format(key, value) logger.debug(msg) # record actual request info request_headers = dict(resp_obj.request.headers) request_cookies = resp_obj.request._cookies.get_dict() request_body = resp_obj.request.body if request_body is not None: try: request_body = json.loads(request_body) except json.JSONDecodeError: # str: a=1&b=2 pass except UnicodeDecodeError: # bytes/bytearray: request body in protobuf pass except TypeError: # neither str nor bytes/bytearray, e.g. <MultipartEncoder> pass request_content_type = lower_dict_keys(request_headers).get( "content-type") if request_content_type and "multipart/form-data" in request_content_type: # upload file type request_body = "upload file stream (OMITTED)" request_data = RequestData( method=resp_obj.request.method, url=resp_obj.request.url, headers=request_headers, cookies=request_cookies, body=request_body, ) # log request details in debug mode log_print(request_data, "request") # record response info resp_headers = dict(resp_obj.headers) lower_resp_headers = lower_dict_keys(resp_headers) content_type = lower_resp_headers.get("content-type", "") if "image" in content_type: # response is image type, record bytes content only response_body = resp_obj.content else: try: # try to record json data response_body = resp_obj.json() except ValueError: # only record at most 512 text charactors resp_text = resp_obj.text response_body = omit_long_data(resp_text) response_data = ResponseData( status_code=resp_obj.status_code, cookies=resp_obj.cookies or {}, encoding=resp_obj.encoding, headers=resp_headers, content_type=content_type, body=response_body, ) # log response details in debug mode log_print(response_data, "response") req_resp_data = ReqRespData(request=request_data, response=response_data) return req_resp_data
def get_req_resp_record(resp_obj): """ get request and response info from Response() object. 从response()对象中获取请求和响应信息 """ def log_print(req_resp_dict, r_type): msg = "\n================== {} details ==================\n".format( r_type) for key, value in req_resp_dict[r_type].items(): msg += "{:<16} : {}\n".format(key, repr(value)) logger.log_debug(msg) req_resp_dict = {"request": {}, "response": {}} # record actual request info记录实际请求信息 req_resp_dict["request"]["url"] = resp_obj.request.url req_resp_dict["request"]["method"] = resp_obj.request.method req_resp_dict["request"]["headers"] = dict(resp_obj.request.headers) request_body = resp_obj.request.body if request_body: request_content_type = lower_dict_keys( req_resp_dict["request"]["headers"]).get("content-type") if request_content_type and "multipart/form-data" in request_content_type: # upload file type上传文件类型:上传文件流(略) req_resp_dict["request"]["body"] = "upload file stream (OMITTED)" else: req_resp_dict["request"]["body"] = request_body # log request details in debug mode在调试模式下记录请求细节 log_print(req_resp_dict, "request") # record response info req_resp_dict["response"]["ok"] = resp_obj.ok req_resp_dict["response"]["url"] = resp_obj.url req_resp_dict["response"]["status_code"] = resp_obj.status_code req_resp_dict["response"]["reason"] = resp_obj.reason req_resp_dict["response"]["cookies"] = resp_obj.cookies or {} req_resp_dict["response"]["encoding"] = resp_obj.encoding resp_headers = dict(resp_obj.headers) req_resp_dict["response"]["headers"] = resp_headers lower_resp_headers = lower_dict_keys(resp_headers) content_type = lower_resp_headers.get("content-type", "") req_resp_dict["response"]["content_type"] = content_type if "image" in content_type: # response is image type, record bytes content only # 响应是图像类型,只记录字节内容 req_resp_dict["response"]["body"] = resp_obj.content else: try: # try to record json data尝试记录json数据 if isinstance(resp_obj, response.ResponseObject): req_resp_dict["response"]["body"] = resp_obj.json else: req_resp_dict["response"]["body"] = resp_obj.json() except ValueError: # only record at most 512 text charactors # 最多只记录512个文本字符 resp_text = resp_obj.text req_resp_dict["response"]["body"] = omit_long_data(resp_text) # log response details in debug mode # 在调试模式下记录响应细节 log_print(req_resp_dict, "response") return req_resp_dict
def get_req_resp_record(resp_obj: Response) -> ReqRespData: """ get request and response info from Response() object. """ def log_print(req_or_resp, r_type): msg = f"\n================== {r_type} details ==================\n" for key, value in req_or_resp.dict().items(): msg += "{:<16} : {}\n".format(key, repr(value)) logger.debug(msg) # record actual request info request_headers = dict(resp_obj.request.headers) request_body = resp_obj.request.body if request_body: request_content_type = lower_dict_keys(request_headers).get("content-type") if request_content_type and "multipart/form-data" in request_content_type: # upload file type request_body = "upload file stream (OMITTED)" request_data = RequestData( method=resp_obj.request.method, url=resp_obj.request.url, headers=request_headers, body=request_body, ) # log request details in debug mode log_print(request_data, "request") # record response info resp_headers = dict(resp_obj.headers) lower_resp_headers = lower_dict_keys(resp_headers) content_type = lower_resp_headers.get("content-type", "") if "image" in content_type: # response is image type, record bytes content only response_body = resp_obj.content else: try: # try to record json data response_body = resp_obj.json() except ValueError: # only record at most 512 text charactors resp_text = resp_obj.text response_body = omit_long_data(resp_text) response_data = ResponseData( status_code=resp_obj.status_code, cookies=resp_obj.cookies or {}, encoding=resp_obj.encoding, headers=resp_headers, content_type=content_type, body=response_body, ) # log response details in debug mode log_print(response_data, "response") req_resp_data = ReqRespData(request=request_data, response=response_data) return req_resp_data