From 48056daea95c33d52fbdd77a3ae802f8301a9961 Mon Sep 17 00:00:00 2001 From: Kiritow <1362050620@qq.com> Date: Wed, 22 Mar 2017 14:17:42 +0800 Subject: [PATCH] Bug Fixed: Retry times limited to 3 Due to some reason, some data is possibly not able to be fetched. If there's not a limitation, the system will retry until it succeed. --- main.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index 99c9d46..515e4e5 100644 --- a/main.cpp +++ b/main.cpp @@ -50,7 +50,7 @@ double LocalParse(int id) void prepareCookie() { - system(R"(curl -v "life.ccb.com/tran/WCCMainPlatV5?CCB_IBSVersion=V5&SERVLET_NAME=WCCMainPlatV5&TXCODE=100119&USERID=&SKEY=" --user-agent "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" -c temp/cookie1.txt > temp/step1.txt)"); + system(R"(curl -s "life.ccb.com/tran/WCCMainPlatV5?CCB_IBSVersion=V5&SERVLET_NAME=WCCMainPlatV5&TXCODE=100119&USERID=&SKEY=" --user-agent "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" -c temp/cookie1.txt > temp/step1.txt)"); } bool _fetched_cookie=false; @@ -66,7 +66,7 @@ void BeginNetwork() void RunCommand(string stuNumber,string outputFilename) { - string cmd=R"(curl -v "life.ccb.com/tran/WCCMainPlatV5?CCB_IBSVersion=V5&SERVLET_NAME=WCCMainPlatV5&isAjaxRequest=true&TXCODE=JF1103&OPUN_COD=370200&MERCHANT=#STUCODE#100010&COMM=#STUCODE#&BANK_COD=370000&BIll_CODE=100010&PAY_TYPE=11&BILL_FLAG=0&BIll_MERCHANT=600007&BANK_NAME=%E5%B1%B1%E4%B8%9C%E7%9C%81&OPUN_NAME=%E9%9D%92%E5%B2%9B%E5%B8%82&MERCHANT_NAME=%E9%9D%92%E5%B2%9B%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%A6%E6%A0%A1%E5%9B%AD%E5%8D%A1%E5%85%85%E5%80%BC&BILL_TYPE=2&BRAN_NO=371000000&BILL_ITEM=01013&BILL_NAME=IC%E5%8D%A1%E3%80%81%E8%81%94%E5%90%8D%E5%8D%A1%E5%85%85%E5%80%BC&RE1CON=&RE2CON=" --user-agent "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" -b "temp/cookie1.txt" > )" ; + string cmd=R"(curl -s "life.ccb.com/tran/WCCMainPlatV5?CCB_IBSVersion=V5&SERVLET_NAME=WCCMainPlatV5&isAjaxRequest=true&TXCODE=JF1103&OPUN_COD=370200&MERCHANT=#STUCODE#100010&COMM=#STUCODE#&BANK_COD=370000&BIll_CODE=100010&PAY_TYPE=11&BILL_FLAG=0&BIll_MERCHANT=600007&BANK_NAME=%E5%B1%B1%E4%B8%9C%E7%9C%81&OPUN_NAME=%E9%9D%92%E5%B2%9B%E5%B8%82&MERCHANT_NAME=%E9%9D%92%E5%B2%9B%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%A6%E6%A0%A1%E5%9B%AD%E5%8D%A1%E5%85%85%E5%80%BC&BILL_TYPE=2&BRAN_NO=371000000&BILL_ITEM=01013&BILL_NAME=IC%E5%8D%A1%E3%80%81%E8%81%94%E5%90%8D%E5%8D%A1%E5%85%85%E5%80%BC&RE1CON=&RE2CON=" --user-agent "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" -b "temp/cookie1.txt" > )" ; string target="#STUCODE#"; @@ -91,8 +91,8 @@ void RemoteQuery(string PreCode,int ID) printf("执行查询.. StuID=%s\n",stuCode.c_str()); RunCommand(stuCode,Filename); - /// Delay 3~6 seconds - this_thread::sleep_for(chrono::seconds(rand()%3+3)); + /// Delay 1~4 seconds + this_thread::sleep_for(chrono::seconds(rand()%3+1)); } #define HEAD_STR "15080901" @@ -118,7 +118,7 @@ int main() printf("查询完成,开始解析...\n"); vector vec; - queue needrefetch; + queue> needrefetch; for(int i=0;i pack=needrefetch.front(); needrefetch.pop(); + int id=pack.first; printf("重新获取ID: %d\n",id); RemoteQuery(HEAD_STR,id); double val=LocalParse(id); if(val==-2) { printf("重新获取ID: %d 失败.\n",id); - needrefetch.push(id); + + if(pack.second<3) + { + printf("重新获取失败多次,停止获取ID: %d.\n",id); + needrefetch.push(make_pair(id,pack.second+1)); + } } else {