diff --git a/config_jingbo.py b/config_jingbo.py index 1d2ae36..d11207b 100644 --- a/config_jingbo.py +++ b/config_jingbo.py @@ -234,6 +234,9 @@ is_update_eta = False # 预测结果上传到eta is_update_report = False # 是否上传报告 is_update_warning_data = False # 是否上传预警数据 is_del_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 ,0 为不删除,0.6 表示删除相关性小于0.6的特征 +is_del_tow_month = True # 是否删除两个月不更新的特征 + + # 连接到数据库 db_mysql = MySQLDB(host=host, user=dbusername, password=password, database=dbname) @@ -242,7 +245,7 @@ print("数据库连接成功",host,dbname,dbusername) # 数据截取日期 -start_year = 2018 # 数据开始年份 +start_year = 2020 # 数据开始年份 end_time = '2024-12-04' # 数据截取日期 freq = 'B' # 时间频率,"D": 天 "W": 周"M": 月"Q": 季度"A": 年 "H": 小时 "T": 分钟 "S": 秒 "B": 工作日 delweekenday = True if freq == 'B' else False # 是否删除周末数据 diff --git a/lib/dataread.py b/lib/dataread.py index 8ed1e9a..c9a0cb5 100644 --- a/lib/dataread.py +++ b/lib/dataread.py @@ -700,16 +700,17 @@ def datachuli(df_zhibiaoshuju,df_zhibiaoliebiao,datecol='date',end_time='',y='y' # if is_update_warning_data: # upload_warning_info(last_update_times_df,y_last_update_time) # 去掉近最后数据对应的日期在六月以前的列,删除近2月的数据是常熟的列 - current_date = datetime.datetime.now() - two_months_ago = current_date - timedelta(days=180) - logger.info(f'删除两月不更新特征前数据量:{df.shape}') - columns_to_drop = [] - for clo in df.columns: - if check_column(df,clo,two_months_ago): - columns_to_drop.append(clo) - df = df.drop(columns=columns_to_drop) + if is_del_tow_month: + current_date = datetime.datetime.now() + two_months_ago = current_date - timedelta(days=180) + logger.info(f'删除两月不更新特征前数据量:{df.shape}') + columns_to_drop = [] + for clo in df.columns: + if check_column(df,clo,two_months_ago): + columns_to_drop.append(clo) + df = df.drop(columns=columns_to_drop) - logger.info(f'删除两月不更新特征后数据量:{df.shape}') + logger.info(f'删除两月不更新特征后数据量:{df.shape}') if freq == 'W': # 按周取样 diff --git a/main_yuanyou.py b/main_yuanyou.py index 165ff37..3e8f425 100644 --- a/main_yuanyou.py +++ b/main_yuanyou.py @@ -9,7 +9,7 @@ torch.set_float32_matmul_precision("high") -def predict_main(end_time): +def predict_main(): """ 主预测函数,用于从 ETA 获取数据、处理数据、训练模型并进行预测。 @@ -238,8 +238,12 @@ def predict_main(end_time): if __name__ == '__main__': + is_on = True # 遍历2024-11-25 到 2024-12-3 之间的工作日日期 - for i_time in pd.date_range('2024-12-02', '2024-12-16', freq='B'): + for i_time in pd.date_range('2024-10-07', '2024-12-16', freq='B'): end_time = i_time.strftime('%Y-%m-%d') - # print(e_time) - predict_main(end_time) \ No newline at end of file + predict_main() + if is_on: + is_train = False + is_on = False + is_fivemodels = True \ No newline at end of file diff --git a/models/nerulforcastmodels.py b/models/nerulforcastmodels.py index 66945d9..5afb0b2 100644 --- a/models/nerulforcastmodels.py +++ b/models/nerulforcastmodels.py @@ -357,9 +357,6 @@ def model_losss(sqlitedb,end_time): # 取前五最佳模型的最大最小值作为上下边界值 df_combined3[['min_within_quantile','max_within_quantile']]= df_combined3[modelnames].apply(add_upper_lower_bound, axis=1) - - - def find_closest_values(row): x = row.y if x is None or np.isnan(x): @@ -439,16 +436,16 @@ def model_losss(sqlitedb,end_time): # 准确率基准与绘图上下界逻辑一致 # predict_y[['min_price','max_price']] = predict_y[['min_within_quantile','max_within_quantile']] # 模型评估前五均值 - # predict_y['min_price'] = predict_y[modelnames].mean(axis=1) -1 - # predict_y['max_price'] = predict_y[modelnames].mean(axis=1) +1 + predict_y['min_price'] = predict_y[modelnames].mean(axis=1) -1 + predict_y['max_price'] = predict_y[modelnames].mean(axis=1) +1 # 模型评估前十均值 # predict_y['min_price'] = predict_y[allmodelnames[0:10]].mean(axis=1) -1 # predict_y['max_price'] = predict_y[allmodelnames[0:10]].mean(axis=1) +1 # 模型评估前十最大最小 # allmodelnames 和 predict_y 列 重复的 - allmodelnames = [col for col in allmodelnames if col in predict_y.columns] - predict_y['min_price'] = predict_y[allmodelnames[0:10]].min(axis=1) - predict_y['max_price'] = predict_y[allmodelnames[0:10]].max(axis=1) + # allmodelnames = [col for col in allmodelnames if col in predict_y.columns] + # predict_y['min_price'] = predict_y[allmodelnames[0:10]].min(axis=1) + # predict_y['max_price'] = predict_y[allmodelnames[0:10]].max(axis=1) for id in ids: row = predict_y[predict_y['id'] == id] try: diff --git a/原油价格预测准确率计算.ipynb b/原油价格预测准确率计算.ipynb index 6c6bfe6..fd7f512 100644 --- a/原油价格预测准确率计算.ipynb +++ b/原油价格预测准确率计算.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 13, "id": "9daadf20-caa6-4b25-901c-6cc3ef563f58", "metadata": {}, "outputs": [ @@ -11,7 +11,7 @@ "output_type": "stream", "text": [ "(85, 28)\n", - "(20, 4)\n", + "(22, 4)\n", "(85, 31)\n", " ds NHITS Informer LSTM iTransformer TSMixer \\\n", "0 2024-11-25 75.714300 75.523370 73.614220 75.27068 75.03936 \n", @@ -35,11 +35,11 @@ "4 73.96690 74.81860 5 2024-11-22 73.521570 \n", "\n", " max_price 序号 LOW_PRICE HIGH_PRICE \n", - "0 75.959854 10.0 72.30 74.83 \n", - "1 77.182580 9.0 71.63 73.80 \n", - "2 78.378624 8.0 71.71 72.85 \n", - "3 79.415400 7.0 71.85 72.96 \n", - "4 79.576970 6.0 71.75 73.34 \n", + "0 75.959854 15.0 72.30 74.83 \n", + "1 77.182580 14.0 71.63 73.80 \n", + "2 78.378624 13.0 71.71 72.85 \n", + "3 79.415400 12.0 71.85 72.96 \n", + "4 79.576970 11.0 71.75 73.34 \n", "\n", "[5 rows x 31 columns]\n", " ds NHITS Informer LSTM iTransformer TSMixer \\\n", @@ -79,6 +79,10 @@ "import os\n", "import pandas as pd\n", "\n", + "# dataset = r'D:\\liurui\\dev\\code\\PriceForecast\\yuanyoudataset'\n", + "\n", + "dataset = r'C:\\Users\\Administrator\\Desktop' \n", + "\n", "# 预测价格数据\n", "# dbfilename = os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','jbsh_yuanyou.db')\n", "# conn = sqlite3.connect(dbfilename)\n", @@ -89,12 +93,12 @@ "# print(df1.shape)\n", "\n", "# 预测价格数据\n", - "dfcsvfilename = os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','accuracy_ten.csv')\n", + "dfcsvfilename = os.path.join(dataset,'accuracy_ten.csv')\n", "df1 = pd.read_csv(dfcsvfilename)\n", "print(df1.shape)\n", "\n", "# 最高最低价\n", - "xlsfilename = os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','数据项下载.xls')\n", + "xlsfilename = os.path.join(dataset,'数据项下载.xls')\n", "df2 = pd.read_excel(xlsfilename)[5:]\n", "df2 = df2.rename(columns = {'数据项名称':'ds','布伦特最低价':'LOW_PRICE','布伦特最高价':'HIGH_PRICE'})\n", "print(df2.shape)\n", @@ -108,8 +112,9 @@ "df = df.reindex()\n", "\n", "print(df.shape)\n", - "\n", - "df.to_csv(os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','123.csv'))\n", + "# from datetime import datetime\n", + "import time\n", + "df.to_csv(os.path.join(dataset,f'预测数据-{time.time()}.csv'))\n", "# df = df[['ds','min_within_quantile','max_within_quantile']]\n", "\n", "\n", @@ -121,53 +126,128 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 27, + "id": "0d77ab7d", + "metadata": {}, + "outputs": [], + "source": [ + "# 模型评估前五均值 \n", + "df['min_price'] = df.iloc[:,1:11].mean(axis=1) -2\n", + "df['max_price'] = df.iloc[:,1:11].mean(axis=1) +2" + ] + }, + { + "cell_type": "code", + "execution_count": 28, "id": "e51c3fd0-6bff-45de-b8b6-971e7986c7a7", "metadata": {}, "outputs": [ { - "ename": "KeyError", - "evalue": "\"None of [Index(['HIGH_PRICE_y', 'LOW_PRICE_y', 'MIN_PRICE', 'MAX_PRICE'], dtype='object')] are in the [columns]\"", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[3], line 15\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[38;5;66;03m# 使用 apply 函数来应用计算准确率的函数\u001b[39;00m\n\u001b[0;32m 14\u001b[0m columns \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHIGH_PRICE_y\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mLOW_PRICE_y\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMIN_PRICE\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMAX_PRICE\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m---> 15\u001b[0m df[columns] \u001b[38;5;241m=\u001b[39m df[columns]\u001b[38;5;241m.\u001b[39mastype(\u001b[38;5;28mfloat\u001b[39m)\n\u001b[0;32m 16\u001b[0m df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mACCURACY\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m df\u001b[38;5;241m.\u001b[39mapply(calculate_accuracy, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 19\u001b[0m \u001b[38;5;66;03m# 打印结果\u001b[39;00m\n", - "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:3899\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3897\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_iterator(key):\n\u001b[0;32m 3898\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(key)\n\u001b[1;32m-> 3899\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39m_get_indexer_strict(key, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcolumns\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m 3901\u001b[0m \u001b[38;5;66;03m# take() does not accept boolean indexers\u001b[39;00m\n\u001b[0;32m 3902\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(indexer, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdtype\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mbool\u001b[39m:\n", - "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6115\u001b[0m, in \u001b[0;36mIndex._get_indexer_strict\u001b[1;34m(self, key, axis_name)\u001b[0m\n\u001b[0;32m 6112\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 6113\u001b[0m keyarr, indexer, new_indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reindex_non_unique(keyarr)\n\u001b[1;32m-> 6115\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_raise_if_missing(keyarr, indexer, axis_name)\n\u001b[0;32m 6117\u001b[0m keyarr \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtake(indexer)\n\u001b[0;32m 6118\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, Index):\n\u001b[0;32m 6119\u001b[0m \u001b[38;5;66;03m# GH 42790 - Preserve name from an Index\u001b[39;00m\n", - "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6176\u001b[0m, in \u001b[0;36mIndex._raise_if_missing\u001b[1;34m(self, key, indexer, axis_name)\u001b[0m\n\u001b[0;32m 6174\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m use_interval_msg:\n\u001b[0;32m 6175\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(key)\n\u001b[1;32m-> 6176\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone of [\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkey\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m] are in the [\u001b[39m\u001b[38;5;132;01m{\u001b[39;00maxis_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m]\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 6178\u001b[0m not_found \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(ensure_index(key)[missing_mask\u001b[38;5;241m.\u001b[39mnonzero()[\u001b[38;5;241m0\u001b[39m]]\u001b[38;5;241m.\u001b[39munique())\n\u001b[0;32m 6179\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnot_found\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not in index\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[1;31mKeyError\u001b[0m: \"None of [Index(['HIGH_PRICE_y', 'LOW_PRICE_y', 'MIN_PRICE', 'MAX_PRICE'], dtype='object')] are in the [columns]\"" + "name": "stdout", + "output_type": "stream", + "text": [ + " 开始日期 结束日期 准确率\n", + "0 2024-11-08 2024-11-15 0\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-15 2024-11-22 0\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-15 2024-11-22 0\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-15 2024-11-22 0\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-15 2024-11-22 0\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-15 2024-11-22 0\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-22 2024-11-29 0.808456\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-22 2024-11-29 0.808456\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-22 2024-11-29 0.808456\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-22 2024-11-29 0.808456\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-22 2024-11-29 0.808456\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-29 2024-12-06 0.955061\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-29 2024-12-06 0.955061\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-29 2024-12-06 0.955061\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-29 2024-12-06 0.955061\n", + " 开始日期 结束日期 准确率\n", + "0 2024-11-29 2024-12-06 0.955061\n", + " 开始日期 结束日期 准确率\n", + "0 2024-12-06 2024-12-13 0.905554\n" ] } ], "source": [ "# 定义一个函数来计算准确率\n", + "# 比较真实最高最低,和预测最高最低 计算准确率\n", "def calculate_accuracy(row):\n", - " if row['HIGH_PRICE_y'] > row['MIN_PRICE']:\n", - " sorted_prices = sorted([row['LOW_PRICE_y'], row['MIN_PRICE'], row['MAX_PRICE'], row['HIGH_PRICE_y']])\n", + " # 全子集情况:\n", + " if (row['max_price'] >= row['HIGH_PRICE'] and row['min_price'] <= row['LOW_PRICE']) or \\\n", + " (row['max_price'] <= row['HIGH_PRICE'] and row['min_price'] >= row['LOW_PRICE']):\n", + " return 1 \n", + " # 无交集情况:\n", + " if row['max_price'] < row['LOW_PRICE'] or \\\n", + " row['min_price'] > row['HIGH_PRICE']:\n", + " return 0\n", + " # 有交集情况:\n", + " else:\n", + " sorted_prices = sorted([row['LOW_PRICE'], row['min_price'], row['max_price'], row['HIGH_PRICE']])\n", " middle_diff = sorted_prices[2] - sorted_prices[1]\n", - " price_range = row['HIGH_PRICE_y'] - row['LOW_PRICE_y']\n", + " price_range = row['HIGH_PRICE'] - row['LOW_PRICE']\n", " accuracy = middle_diff / price_range\n", " return accuracy\n", - " else:\n", - " return 0\n", + "import datetime\n", + "weight_dict = [0.4,0.15,0.1,0.1,0.25] # 权重\n", "\n", - "# 使用 apply 函数来应用计算准确率的函数\n", - "\n", - "columns = ['HIGH_PRICE_y','LOW_PRICE_y','MIN_PRICE','MAX_PRICE']\n", + "columns = ['HIGH_PRICE','LOW_PRICE','min_price','max_price']\n", "df[columns] = df[columns].astype(float)\n", "df['ACCURACY'] = df.apply(calculate_accuracy, axis=1)\n", + "# df['ACCURACY'] = df.apply(is_within_range, axis=1)\n", + "# 取结束日期上一周的日期\n", + "def get_week_date(end_time):\n", + " endtime = end_time\n", + " endtimeweek = datetime.datetime.strptime(endtime, '%Y-%m-%d')\n", + " up_week = endtimeweek - datetime.timedelta(days=endtimeweek.weekday() + 14)\n", + " up_week_dates = [up_week + datetime.timedelta(days=i) for i in range(14)][4:-2]\n", + " up_week_dates = [date.strftime('%Y-%m-%d') for date in up_week_dates]\n", + " return up_week_dates\n", "\n", + "# 计算准确率并保存结果\n", + "def _get_accuracy_rate(df,up_week_dates,endtime):\n", + " df3 = df.copy()\n", + " df3 = df3[df3['CREAT_DATE'].isin(up_week_dates)]\n", + " df3 = df3[df3['ds'].isin(up_week_dates)]\n", + " accuracy_rote = 0\n", + " for i,group in df3.groupby('ds'):\n", + " # print('权重:',weight_dict[len(group)-1])\n", + " # print('准确率:',(group['ACCURACY'].sum()/len(group))*weight_dict[len(group)-1])\n", + " accuracy_rote += (group['ACCURACY'].sum()/len(group))*weight_dict[len(group)-1]\n", + " df3.to_csv(os.path.join(dataset,f'accuracy_{endtime}.csv'),index=False)\n", + " df4 = pd.DataFrame(columns=['开始日期','结束日期','准确率'])\n", + " df4.loc[len(df4)] = {'开始日期':up_week_dates[0],'结束日期':up_week_dates[-1],'准确率':accuracy_rote}\n", + " df4.to_csv(os.path.join(dataset,f'accuracy_rote_{endtime}.csv'),index=False)\n", + " print(df4)\n", + " # df4.to_sql(\"accuracy_rote\", con=sqlitedb.connection, if_exists='append', index=False)\n", + "\n", + "\n", + "end_times = df['CREAT_DATE'].unique()\n", + "for endtime in end_times:\n", + " up_week_dates = get_week_date(endtime)\n", + " _get_accuracy_rate(df,up_week_dates,end_time)\n", "\n", "# 打印结果\n", - "print(df[['ds','ACCURACY',]+columns])\n", - "\n", - "df = df[['ds','ACCURACY','PREDICT_DATE','CREAT_DATE']+columns]" + "\n" ] }, { "cell_type": "code", - "execution_count": 138, + "execution_count": null, "id": "0f942c69", "metadata": {}, "outputs": [], @@ -180,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 139, + "execution_count": null, "id": "a7b05510", "metadata": {}, "outputs": [ @@ -407,7 +487,7 @@ }, { "cell_type": "code", - "execution_count": 140, + "execution_count": null, "id": "1374e354", "metadata": {}, "outputs": [ @@ -445,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": 141, + "execution_count": null, "id": "8aa47e90", "metadata": {}, "outputs": [ diff --git a/测试环境登录接口调试.ipynb b/测试环境登录接口调试.ipynb index 54a70c4..8b1ce0a 100644 --- a/测试环境登录接口调试.ipynb +++ b/测试环境登录接口调试.ipynb @@ -2,10 +2,25 @@ "cells": [ { "cell_type": "code", - "execution_count": 25, + "execution_count": 1, "id": "31c0e11d-c87a-4e95-92a0-d1d09625e255", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR:root:Error connecting to the database: (2003, \"Can't connect to MySQL server on '192.168.101.27' (timed out)\")\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数据库连接成功 192.168.101.27 jingbo_test root\n" + ] + } + ], "source": [ "from config_jingbo import *\n", "import requests\n", @@ -15,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 2, "id": "83c81b9e", "metadata": {}, "outputs": [ @@ -25,7 +40,7 @@ "'http://192.168.100.53:8080/jingbo-dev/api/server/login'" ] }, - "execution_count": 26, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -44,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 3, "id": "2b330ee3-c006-4ab1-8558-59c51ac8d86f", "metadata": {}, "outputs": [ @@ -59,7 +74,7 @@ " 'funcOperation': '获取token'}" ] }, - "execution_count": 27, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -70,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 4, "id": "dcb6100a-ed2b-4077-a1a9-361c6cb565f9", "metadata": {}, "outputs": [], @@ -87,15 +102,48 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 5, "id": "22c0c7c4", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'confirmFlg': False, 'data': {'accessToken': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhcGlfdGVzdCIsInRoIjoiOGE0NTc3ZGJkOTE5Njc1NzU4ZDU3OTk5YTFlODkxZmUiLCJsdCI6ImFwaSIsImlzcyI6IiIsInRtIjoiUEMiLCJleHAiOjE3MzM4NjAyODMsImp0aSI6IjliYTc4MzVkNmQyNDRjNTk4ODc0MjQ3OGU0ZDljNTJmIn0.ZvwSQ9_AoQ1Kn3Tdu8aZudrhC0aXzOsPUNkPP8DaDxo', 'md5Token': '2ca765c5b7aafb19c474b00a26c9fb3c'}, 'status': True}\n" + "ename": "ConnectTimeout", + "evalue": "HTTPConnectionPool(host='192.168.100.53', port=8080): Max retries exceeded with url: /jingbo-dev/api/server/login (Caused by ConnectTimeoutError(, 'Connection to 192.168.100.53 timed out. (connect timeout=3)'))", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTimeoutError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\connection.py:196\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 195\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 196\u001b[0m sock \u001b[38;5;241m=\u001b[39m connection\u001b[38;5;241m.\u001b[39mcreate_connection(\n\u001b[0;32m 197\u001b[0m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_dns_host, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mport),\n\u001b[0;32m 198\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtimeout,\n\u001b[0;32m 199\u001b[0m source_address\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msource_address,\n\u001b[0;32m 200\u001b[0m socket_options\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msocket_options,\n\u001b[0;32m 201\u001b[0m )\n\u001b[0;32m 202\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\util\\connection.py:85\u001b[0m, in \u001b[0;36mcreate_connection\u001b[1;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[0;32m 84\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 85\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\n\u001b[0;32m 86\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 87\u001b[0m \u001b[38;5;66;03m# Break explicitly a reference cycle\u001b[39;00m\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\util\\connection.py:73\u001b[0m, in \u001b[0;36mcreate_connection\u001b[1;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[0;32m 72\u001b[0m sock\u001b[38;5;241m.\u001b[39mbind(source_address)\n\u001b[1;32m---> 73\u001b[0m sock\u001b[38;5;241m.\u001b[39mconnect(sa)\n\u001b[0;32m 74\u001b[0m \u001b[38;5;66;03m# Break explicitly a reference cycle\u001b[39;00m\n", + "\u001b[1;31mTimeoutError\u001b[0m: timed out", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mConnectTimeoutError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\connectionpool.py:789\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[1;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[0;32m 788\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[1;32m--> 789\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_request(\n\u001b[0;32m 790\u001b[0m conn,\n\u001b[0;32m 791\u001b[0m method,\n\u001b[0;32m 792\u001b[0m url,\n\u001b[0;32m 793\u001b[0m timeout\u001b[38;5;241m=\u001b[39mtimeout_obj,\n\u001b[0;32m 794\u001b[0m body\u001b[38;5;241m=\u001b[39mbody,\n\u001b[0;32m 795\u001b[0m headers\u001b[38;5;241m=\u001b[39mheaders,\n\u001b[0;32m 796\u001b[0m chunked\u001b[38;5;241m=\u001b[39mchunked,\n\u001b[0;32m 797\u001b[0m retries\u001b[38;5;241m=\u001b[39mretries,\n\u001b[0;32m 798\u001b[0m response_conn\u001b[38;5;241m=\u001b[39mresponse_conn,\n\u001b[0;32m 799\u001b[0m preload_content\u001b[38;5;241m=\u001b[39mpreload_content,\n\u001b[0;32m 800\u001b[0m decode_content\u001b[38;5;241m=\u001b[39mdecode_content,\n\u001b[0;32m 801\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mresponse_kw,\n\u001b[0;32m 802\u001b[0m )\n\u001b[0;32m 804\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\connectionpool.py:495\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[1;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[0;32m 494\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 495\u001b[0m conn\u001b[38;5;241m.\u001b[39mrequest(\n\u001b[0;32m 496\u001b[0m method,\n\u001b[0;32m 497\u001b[0m url,\n\u001b[0;32m 498\u001b[0m body\u001b[38;5;241m=\u001b[39mbody,\n\u001b[0;32m 499\u001b[0m headers\u001b[38;5;241m=\u001b[39mheaders,\n\u001b[0;32m 500\u001b[0m chunked\u001b[38;5;241m=\u001b[39mchunked,\n\u001b[0;32m 501\u001b[0m preload_content\u001b[38;5;241m=\u001b[39mpreload_content,\n\u001b[0;32m 502\u001b[0m decode_content\u001b[38;5;241m=\u001b[39mdecode_content,\n\u001b[0;32m 503\u001b[0m enforce_content_length\u001b[38;5;241m=\u001b[39menforce_content_length,\n\u001b[0;32m 504\u001b[0m )\n\u001b[0;32m 506\u001b[0m \u001b[38;5;66;03m# We are swallowing BrokenPipeError (errno.EPIPE) since the server is\u001b[39;00m\n\u001b[0;32m 507\u001b[0m \u001b[38;5;66;03m# legitimately able to close the connection after sending a valid response.\u001b[39;00m\n\u001b[0;32m 508\u001b[0m \u001b[38;5;66;03m# With this behaviour, the received response is still readable.\u001b[39;00m\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\connection.py:398\u001b[0m, in \u001b[0;36mHTTPConnection.request\u001b[1;34m(self, method, url, body, headers, chunked, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[0;32m 397\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mputheader(header, value)\n\u001b[1;32m--> 398\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mendheaders()\n\u001b[0;32m 400\u001b[0m \u001b[38;5;66;03m# If we're given a body we start sending that in chunks.\u001b[39;00m\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\http\\client.py:1289\u001b[0m, in \u001b[0;36mHTTPConnection.endheaders\u001b[1;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[0;32m 1288\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m CannotSendHeader()\n\u001b[1;32m-> 1289\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_send_output(message_body, encode_chunked\u001b[38;5;241m=\u001b[39mencode_chunked)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\http\\client.py:1048\u001b[0m, in \u001b[0;36mHTTPConnection._send_output\u001b[1;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[0;32m 1047\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer[:]\n\u001b[1;32m-> 1048\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend(msg)\n\u001b[0;32m 1050\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m message_body \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1051\u001b[0m \n\u001b[0;32m 1052\u001b[0m \u001b[38;5;66;03m# create a consistent interface to message_body\u001b[39;00m\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\http\\client.py:986\u001b[0m, in \u001b[0;36mHTTPConnection.send\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 985\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mauto_open:\n\u001b[1;32m--> 986\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconnect()\n\u001b[0;32m 987\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\connection.py:236\u001b[0m, in \u001b[0;36mHTTPConnection.connect\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconnect\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 236\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_new_conn()\n\u001b[0;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tunnel_host:\n\u001b[0;32m 238\u001b[0m \u001b[38;5;66;03m# If we're tunneling it means we're connected to our proxy.\u001b[39;00m\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m--> 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ConnectTimeoutError(\n\u001b[0;32m 206\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m 207\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection to \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m timed out. (connect timeout=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtimeout\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 208\u001b[0m ) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[0;32m 210\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "\u001b[1;31mConnectTimeoutError\u001b[0m: (, 'Connection to 192.168.100.53 timed out. (connect timeout=3)')", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mMaxRetryError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\requests\\adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[1;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[0;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39murlopen(\n\u001b[0;32m 668\u001b[0m method\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mmethod,\n\u001b[0;32m 669\u001b[0m url\u001b[38;5;241m=\u001b[39murl,\n\u001b[0;32m 670\u001b[0m body\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mbody,\n\u001b[0;32m 671\u001b[0m headers\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mheaders,\n\u001b[0;32m 672\u001b[0m redirect\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 673\u001b[0m assert_same_host\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 674\u001b[0m preload_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 675\u001b[0m decode_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 676\u001b[0m retries\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_retries,\n\u001b[0;32m 677\u001b[0m timeout\u001b[38;5;241m=\u001b[39mtimeout,\n\u001b[0;32m 678\u001b[0m chunked\u001b[38;5;241m=\u001b[39mchunked,\n\u001b[0;32m 679\u001b[0m )\n\u001b[0;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\connectionpool.py:843\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[1;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[0;32m 841\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[1;32m--> 843\u001b[0m retries \u001b[38;5;241m=\u001b[39m retries\u001b[38;5;241m.\u001b[39mincrement(\n\u001b[0;32m 844\u001b[0m method, url, error\u001b[38;5;241m=\u001b[39mnew_e, _pool\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m, _stacktrace\u001b[38;5;241m=\u001b[39msys\u001b[38;5;241m.\u001b[39mexc_info()[\u001b[38;5;241m2\u001b[39m]\n\u001b[0;32m 845\u001b[0m )\n\u001b[0;32m 846\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\urllib3\\util\\retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[1;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[0;32m 518\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[1;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[0;32m 521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", + "\u001b[1;31mMaxRetryError\u001b[0m: HTTPConnectionPool(host='192.168.100.53', port=8080): Max retries exceeded with url: /jingbo-dev/api/server/login (Caused by ConnectTimeoutError(, 'Connection to 192.168.100.53 timed out. (connect timeout=3)'))", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[1;31mConnectTimeout\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[5], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m token \u001b[38;5;241m=\u001b[39m get_head_auth_report()\n", + "Cell \u001b[1;32mIn[4], line 2\u001b[0m, in \u001b[0;36mget_head_auth_report\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_head_auth_report\u001b[39m():\n\u001b[1;32m----> 2\u001b[0m login_res \u001b[38;5;241m=\u001b[39m requests\u001b[38;5;241m.\u001b[39mpost(url\u001b[38;5;241m=\u001b[39mlogin_pushreport_url, json\u001b[38;5;241m=\u001b[39mlogin_data, timeout\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m3\u001b[39m, \u001b[38;5;241m5\u001b[39m))\n\u001b[0;32m 3\u001b[0m text \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mloads(login_res\u001b[38;5;241m.\u001b[39mtext)\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(text)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\requests\\api.py:115\u001b[0m, in \u001b[0;36mpost\u001b[1;34m(url, data, json, **kwargs)\u001b[0m\n\u001b[0;32m 103\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpost\u001b[39m(url, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, json\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 104\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a POST request.\u001b[39;00m\n\u001b[0;32m 105\u001b[0m \n\u001b[0;32m 106\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 112\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[0;32m 113\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 115\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m request(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost\u001b[39m\u001b[38;5;124m\"\u001b[39m, url, data\u001b[38;5;241m=\u001b[39mdata, json\u001b[38;5;241m=\u001b[39mjson, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\requests\\api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[1;34m(method, url, **kwargs)\u001b[0m\n\u001b[0;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[0;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[0;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[0;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[1;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m session\u001b[38;5;241m.\u001b[39mrequest(method\u001b[38;5;241m=\u001b[39mmethod, url\u001b[38;5;241m=\u001b[39murl, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\requests\\sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[1;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[0;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[0;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[0;32m 587\u001b[0m }\n\u001b[0;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[1;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend(prep, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39msend_kwargs)\n\u001b[0;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\requests\\sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[1;34m(self, request, **kwargs)\u001b[0m\n\u001b[0;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[0;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[1;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m adapter\u001b[38;5;241m.\u001b[39msend(request, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[0;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\requests\\adapters.py:688\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[1;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[0;32m 685\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, ConnectTimeoutError):\n\u001b[0;32m 686\u001b[0m \u001b[38;5;66;03m# TODO: Remove this in 3.0.0: see #2811\u001b[39;00m\n\u001b[0;32m 687\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, NewConnectionError):\n\u001b[1;32m--> 688\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ConnectTimeout(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m 690\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, ResponseError):\n\u001b[0;32m 691\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m RetryError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", + "\u001b[1;31mConnectTimeout\u001b[0m: HTTPConnectionPool(host='192.168.100.53', port=8080): Max retries exceeded with url: /jingbo-dev/api/server/login (Caused by ConnectTimeoutError(, 'Connection to 192.168.100.53 timed out. (connect timeout=3)'))" ] } ], @@ -105,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "12077ead", "metadata": {}, "outputs": [], @@ -115,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "id": "a7ae21d1", "metadata": {}, "outputs": [