def request_with_cookies(self, url=None, parameters=None): ''' :param url: 请求的url :param parameters: 请求的参数 :return: 返回响应对象 e.g. post_data = {'username': '******', 'password': '******'} loginUrl = "http://test2.ishop-city.com/reconciliation/admin/user/login.json" testUrl = 'http://test2.ishop-city.com/reconciliation/repayCheck/gethuizong.json' http_object = HttpUrlConnection(get_cookie_url=loginUrl, get_cookie_request_data=post_data) result=http_object.request_with_cookies(testUrl) print(result.readlines()) ''' try: # 实例化HttpUrlConnection时如果没传url则将request_with_cookies的url赋给self.__url if self.__url is None: self.__url = url # 实例化HttpUrlConnection时如果没传parameters则将request_with_cookies的parameters赋给self.__url if self.__data is None: self.__data = parameters # 已带cookie的对象必须存在且请求的链接url必传 if self.__opener is not None and self.__url is not None: html = self.__opener.open(self.__url, self.__data) return html else: return 0 except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def generator(): try: global code_list code_list = [] if not code_list: get_district_code() id = code_list[random.randint(0, len(code_list))]['code'] # 地区项 id += str(random.randint(1930, 2013)) # 年份项 da = date.today() + timedelta(days=random.randint(1, 366)) # 月份和日期项 id += da.strftime('%m%d') id += str(random.randint(100, 300)) # ,顺序号简单处理 i = 0 count = 0 weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项 check_code = { '0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '5', '9': '3', '10': '2' } # 校验码映射 for i in range(0, len(id)): count += int(id[i]) * weight[i] id += check_code[str(count % 11)] # 算出校验码 return id except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def request(self): try: conn = http_client.HTTPConnection(self.__host, self.__port) if self.__method == "GET": self.path = self.__path + self.__parameters_urlencode_deal conn.request(self.__method, self.__path) if self.__method == "POST": if self.__headers == {"Content-type": "application/json"}: conn.request(self.__method, self.__path, self.__jdata, self.__headers) if self.__headers == { "Content-type": "application/x-www-form-urlencoded" }: conn.request(self.__method, self.__path, self.__data, self.__headers) response = conn.getresponse() result_origin = response.read() try: result = result_origin.decode("gb2312").encode("utf8") except: result = result_origin return result except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self, url=None, method="GET", parameters=None, cookie=None, headers={}, get_cookie_url=None, get_cookie_request_data=None, get_cookie_headers=[('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]): ''' :param url: 请求使用的url,由于发送cookie的请求方法可以单独传url故此参数非必填。使用request方法请求时必填。 :param method: 请求的方法 :param parameters: 请求的参数 :param cookie: cookie :param headers: 请求头 :param get_cookie_url: 获取cookie的url,如果调用request_with_cookies时此参数必须传 :param get_cookie_request_data: 获取cookie时需要传的参数 :param get_cookie_headers: 获取cookie时需要加的请求头 ''' try: # 解析url if url is None: self.__url = None else: try: if type(url) == bytes: self.__url = url.decode("utf-8") if type(url) == str: self.__url = url except: self.__url = url logger.debug(self.__url) scheme, rest = urllib_parse.splittype(self.__url) # 拆分域名和路径 logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") self.__host_absolutely, self.__path = urllib_parse.splithost(rest) host_list = self.__host_absolutely.split(":") if len(host_list) == 1: self.__host = host_list[0] self.__port = 80 elif len(host_list) == 2: self.__host = host_list[0] self.__port = host_list[1] # 对所传参数进行处理 self.__method = method self.__data = parameters self.__cookie = cookie if parameters != None: self.__parameters_urlencode_deal = urllib_parse.urlencode(parameters) else: self.__parameters_urlencode_deal = "" self.__jdata = simplejson.dumps(parameters, ensure_ascii=False) self.__headers = headers self.__opener = None self.__get_cookie_request_data = None if get_cookie_url is not None: cj = ckjar.CookieJar() self.__opener = urllib_request.build_opener(urllib_request.HTTPCookieProcessor(cj)) self.__opener.addheaders = get_cookie_headers if get_cookie_request_data is not None: self.__get_cookie_request_data = urllib_parse.urlencode(get_cookie_request_data).encode("utf-8") self.__opener.open(get_cookie_url, self.__get_cookie_request_data) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def time_stamp(cls): try: # 格式化 time_format1 = "%Y%m%d%H%M%S" return time.strftime(time_format1) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self): try: current_dir = os.getcwd() self.__ini_config_file = BASE_DIR + "/conf/" + "config.ini" self.__conf_config_file = BASE_DIR + "/conf/" + "config.conf" except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def time_stamp(cls): try: # 格式化 time_format1 = '%Y%m%d%H%M%S' return time.strftime(time_format1) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def ytdyccrm_cancel_func(self): try: self.__data_dict["dt"] = self.__time_stamp sign_str = str(self.__data_dict["dt"]) + self.__data_dict["method"] + str(2.0) + self.__secretkey_value sign = Md5.md5(sign_str) self.__data_dict["sign"] = sign return self.__data_dict except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self, interface_code, data_dict, secretkey_value): try: # 生成时间戳 self.__time_stamp = TimeStamp.time_stamp() self.__data_dict = data_dict self.__secretkey_value = secretkey_value self.__interface_code = interface_code except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def ini_data(self, label, key, configFile=None): try: config = configparser() if configFile is None: configFile = self.__ini_config_file config.read(configFile) return config.get(label, key) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def md5(cls, strVar): try: # md5加密并小写化 md5_var = hashlib.md5() md5_var.update(strVar.encode("utf-8")) # md5_var.update(strVar) sign = md5_var.hexdigest().lower() return sign except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def processing(self): try: processing_dict = dict() # 字典生成key和value的对应关系,value为方法对象而不是执行方法 processing_dict["ytdyccrmcancel"] = self.ytdyccrm_cancel_func if self.__interface_code.decode("utf-8") in processing_dict: return processing_dict[self.__interface_code.decode("utf-8")]() else: return 0 except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def urldecoded(self, data): try: data_list_first = data.split("&") data_list_second = list() for tmp in data_list_first: data_list_second.append(tmp.split("=")) result = dict() for i in data_list_second: result[i[0]] = i[1] return result except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def conf_data(self, key, configFile=None): try: if configFile is None: configFile = self.__conf_config_file config_file = open(configFile, 'r') result = config_file.readlines() result_deal_list = [] key_value_list = [] for i in result: result_deal_list.append(i.strip('\n')) for j in result_deal_list: key_value_list.append(j.split('=')) result_dict = dict(key_value_list) return result_dict[key] except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_district_code(): try: with open(DC_PATH) as file: data = file.read() district_list = data.split('\n') for node in district_list: # print node if node[10:11] != ' ': state = node[10:].strip() if node[10:11] == ' ' and node[12:13] != ' ': city = node[12:].strip() if node[10:11] == ' ' and node[12:13] == ' ': district = node[14:].strip() code = node[0:6] code_list.append({"state": state, "city": city, "district": district, "code": code}) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def request(self): try: conn = http_client.HTTPConnection(self.__host, self.__port) if self.__method == "GET": self.path = self.__path + self.__parameters_urlencode_deal conn.request(self.__method, self.__path) if self.__method == "POST": if self.__headers == {"Content-type": "application/json"}: conn.request(self.__method, self.__path, self.__jdata, self.__headers) if self.__headers == {"Content-type": "application/x-www-form-urlencoded"}: conn.request(self.__method, self.__path, self.__data, self.__headers) response = conn.getresponse() result_origin = response.read() try: result = result_origin.decode("gb2312").encode("utf8") except: result = result_origin return result except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_district_code(): try: with open(DC_PATH) as file: data = file.read() district_list = data.split('\n') for node in district_list: # print node if node[10:11] != ' ': state = node[10:].strip() if node[10:11] == ' ' and node[12:13] != ' ': city = node[12:].strip() if node[10:11] == ' ' and node[12:13] == ' ': district = node[14:].strip() code = node[0:6] code_list.append({ "state": state, "city": city, "district": district, "code": code }) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def generator(): try: global code_list code_list = [] if not code_list: get_district_code() id = code_list[random.randint(0, len(code_list))]['code'] # 地区项 id += str(random.randint(1930, 2013)) # 年份项 da = date.today() + timedelta(days=random.randint(1, 366)) # 月份和日期项 id += da.strftime('%m%d') id += str(random.randint(100, 300)) # ,顺序号简单处理 i = 0 count = 0 weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项 check_code = {'0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '5', '9': '3', '10': '2'} # 校验码映射 for i in range(0, len(id)): count += int(id[i]) * weight[i] id += check_code[str(count % 11)] # 算出校验码 return id except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_opener(self): try: return self.__opener except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_host(self): try: return self.__host except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_parameters_urlencode_deal(self): try: return self.__parameters_urlencode_deal except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_path(self): try: return self.__path except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self, url=None, method="GET", parameters=None, cookie=None, headers={}, get_cookie_url=None, get_cookie_request_data=None, get_cookie_headers=[ ('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') ]): ''' :param url: 请求使用的url,由于发送cookie的请求方法可以单独传url故此参数非必填。使用request方法请求时必填。 :param method: 请求的方法 :param parameters: 请求的参数 :param cookie: cookie :param headers: 请求头 :param get_cookie_url: 获取cookie的url,如果调用request_with_cookies时此参数必须传 :param get_cookie_request_data: 获取cookie时需要传的参数 :param get_cookie_headers: 获取cookie时需要加的请求头 ''' try: # 解析url if url is None: self.__url = None else: try: if type(url) == bytes: self.__url = url.decode("utf-8") if type(url) == str: self.__url = url except: self.__url = url logger.debug(self.__url) scheme, rest = urllib_parse.splittype(self.__url) # 拆分域名和路径 logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") self.__host_absolutely, self.__path = urllib_parse.splithost( rest) host_list = self.__host_absolutely.split(":") if len(host_list) == 1: self.__host = host_list[0] self.__port = 80 elif len(host_list) == 2: self.__host = host_list[0] self.__port = host_list[1] # 对所传参数进行处理 self.__method = method self.__data = parameters self.__cookie = cookie if parameters != None: self.__parameters_urlencode_deal = urllib_parse.urlencode( parameters) else: self.__parameters_urlencode_deal = "" self.__jdata = simplejson.dumps(parameters, ensure_ascii=False) self.__headers = headers self.__opener = None self.__get_cookie_request_data = None if get_cookie_url is not None: cj = ckjar.CookieJar() self.__opener = urllib_request.build_opener( urllib_request.HTTPCookieProcessor(cj)) self.__opener.addheaders = get_cookie_headers if get_cookie_request_data is not None: self.__get_cookie_request_data = urllib_parse.urlencode( get_cookie_request_data).encode("utf-8") self.__opener.open(get_cookie_url, self.__get_cookie_request_data) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")