// ******************************************************************************* // Name : I_Read.hxx // : read web // Author : I. Nakagawa // Create : 2022/08/04 // Modify : 2022/08/25 // Modify : 2022/09/06 // ******************************************************************************* #pragma once #include #include "messbar.hxx" #include "textfile.hxx" #include "itls_tmp.hxx" #include "u_agent.hxx" #include "xtot.hxx" #ifndef Get_user_agent_ #define Get_user_agent_ Get_user_agent #endif //// // ******************************************************************************* // read // Create : 2022/08/09 // ******************************************************************************* inline tstring IR_read (LPCTSTR http_,LPCTSTR svr_obj) { tstring url = tstring(http_) + svr_obj ; tstring read_dt ; tstring serverN ; tstring objectS ; INTERNET_PORT nPort = 0 ; bool is_ssl = false ; { CString server ; CString object ; DWORD serviceType = 0 ; INTERNET_PORT port = 0 ; if (!AfxParseURL(url.c_str(),serviceType,server,object,port)) { std::terr << _T("Failed AfxParseURL |") + url << std::endl ; return read_dt ; } serverN = LPCTSTR(server) ; objectS = LPCTSTR(object) ; nPort = port ; is_ssl = (serviceType==AFX_INET_SERVICE_HTTPS) ; } { tstring user_agent = ::Get_user_agent_() ; CInternetSession session(user_agent.c_str()) ; CHttpConnection* pServer = NULL ; CHttpFile* pFile = NULL ; DWORD dwStatus = 0 ; v_tstring r_buf ; BOOL result = FALSE ; try { pServer = session. GetHttpConnection (serverN.c_str(),nPort) ; if (pServer != NULL) { if (is_ssl) { DWORD dwFlag = INTERNET_FLAG_SECURE ; bool self_cert= false ; // self_cert= true ; bool ign_cert = self_cert ; if (ign_cert) { dwFlag |= INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID ; } pFile = pServer-> OpenRequest (CHttpConnection::HTTP_VERB_GET,objectS.c_str(),NULL,1,NULL,_T("HTTP/1.1"),dwFlag) ; if (ign_cert) { DWORD secFlags = 0 ; pFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS,secFlags) ; secFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA ; pFile->SetOption (INTERNET_OPTION_SECURITY_FLAGS,secFlags) ; } } else { pFile = pServer-> OpenRequest (CHttpConnection::HTTP_VERB_GET,objectS.c_str()) ; } } if (pFile != NULL) { result = pFile-> SendRequest () ; } if (result) { result = pFile-> QueryInfoStatusCode (dwStatus) ; // if (dwStatus == HTTP_STATUS_OK) { CString buf ; while (pFile->ReadString(buf)) { tstring tmp = ::To_tstring(LPCSTR(LPCTSTR(buf))) ; r_buf.push_back(tmp) ; } read_dt = ::String_Join_Line(r_buf) ; } // else { // rData.Format(_T("%d"),dwStatus) ; // return FALSE ; // } } else { std::terr << serverN << _T("\t") << nPort << _T("\t") << _T("SendRequest ... error") << std::endl ; } { delete (pFile) ; delete (pServer) ; } } catch (CInternetException* e) { CString errMsg ; e->GetErrorMessage(errMsg.GetBuffer(1024),1024) ; errMsg.ReleaseBuffer() ; std::terr << serverN << _T("\t") << nPort << _T("\t") ; std::terr << LPCTSTR(errMsg) << std::endl ; { delete (pFile) ; delete (pServer) ; } e->Delete() ; return read_dt ; } session.Close() ; } return read_dt ; } //// // ******************************************************************************* // read // Create : 2022/08/09 // Modify : 2022/08/10 // ******************************************************************************* inline tstring IR_read (c_tstring& url) { tstring http_s_ = url ; tstring svr_obj = url ; svr_obj = ::String_Change(svr_obj.c_str(),_T("https:"),_T("")) ; // del https: svr_obj = ::String_Change(svr_obj.c_str(),_T("http:"), _T("")) ; // del http: if (svr_obj.substr(0,2)==_T("//")) { ; } else if (svr_obj.substr(0,1)==_T("/")) { svr_obj = _T("/") + svr_obj ; } else { svr_obj = _T("//") + svr_obj ; } tstring read_dt ; if (read_dt.empty()) { read_dt = ::IR_read(_T("https:"),svr_obj.c_str()) ; } if (read_dt.empty()) { read_dt = ::IR_read(_T("http:"), svr_obj.c_str()) ; } return read_dt ; } //// // ******************************************************************************* // get dump file name // Create : 2022/08/14 // ******************************************************************************* inline tstring IR_get_dump_name (c_tstring& url) { tstring dmp_name = ::Path_DelLastSP(url) + _T(".htm") ; dmp_name = ::Path_Normalize (dmp_name) ; dmp_name = ::String_Change (dmp_name.c_str(),_T("https:"),_T("/s/")) ; dmp_name = ::String_Change (dmp_name.c_str(),_T("http:"), _T("/_/")) ; dmp_name = ::String_Change (dmp_name.c_str(),_T("+"),_T("/")) ; dmp_name = ::String_Change (dmp_name.c_str(),_T("&"),_T("/")) ; dmp_name = ::String_Change (dmp_name.c_str(),_T("?"),_T("/")) ; dmp_name = ::String_Change (dmp_name.c_str(),_T(":"),_T("/")) ; dmp_name = ::Path_Normalize (dmp_name) ; dmp_name = ::Path_GetAbbreviate (dmp_name,100) ; dmp_name = ::String_Change (dmp_name.c_str(),_T("="),_T(".")) ; dmp_name = ::String_Change (dmp_name.c_str(),_T("%"),_T("/")) ; dmp_name = ::String_Change (dmp_name.c_str(),_T(".."),_T(".")) ; dmp_name = ::Path_Del1st_SP (dmp_name) ; dmp_name = _T("./") + dmp_name ; dmp_name = ::Path_Normalize (dmp_name) ; return dmp_name ; } //// // ******************************************************************************* // get dump file path // Create : 2022/08/04 // Modify : 2022/09/06 // ******************************************************************************* inline tstring IR_get_dump_path (c_tstring& url) { tstring tmp_path = ::Get_i_Tools_tmp() ; tmp_path = ::Get_i_Tools_tmp_name(_T("I_Read")) ; tstring dmp_name = ::IR_get_dump_name(url) ; tstring dmp_path = ::Path_AddLastSP(tmp_path) + dmp_name ; dmp_path = ::Path_Normalize(dmp_path) ; ::Folder_Create(::Path_GetDir(dmp_path)) ; return dmp_path ; } //// // ******************************************************************************* // dump read data %TEMP%/i_Tools.tmp/InetFile/... // Create : 2022/08/10 // ******************************************************************************* inline bool IR_dump_read_data (LPCTSTR svr_name,LPCTSTR name,LPCTSTR r_data) { { tstring tmp_path = ::Get_i_Tools_tmp_name(_T("InetFile")).c_str() ; tstring exe_name = ::Path_GetTitle(::Get_Self_Original()) ; tstring bld_str = ::Get_BuildStrMFC().c_str() ; bld_str = ::String_TrimBoth(bld_str) ; bld_str += ::Get_BuildStr6UD().c_str() ; bld_str = ::String_TrimBoth(bld_str) ; tstring tick_str = ::tto0t(::To_tstring(i_32(::GetTickCount())),10) ; tstring f_name = ::IR_get_dump_name(tstring(svr_name)+_T("/")+name) ; f_name = ::String_Change(f_name.c_str(),_T(".\\"),_T("")) ; f_name = ::String_Change(f_name.c_str(),_T("./"), _T("")) ; f_name = ::Path_GetAbbreviate(f_name,50) ; f_name = ::String_Change(f_name.c_str(),_T("\\"),_T("_")) ; f_name = ::String_Change(f_name.c_str(),_T("/"), _T("_")) ; tstring out_name = ::Path_AddLastSP(tmp_path) + exe_name + _T("/") + ::String_ChangePathSP(bld_str) + _T("/") + tick_str + _T("_") + ::String_ChangePathSP(f_name) ; out_name = ::Path_Normalize(out_name) ; if (::File_CreateEmpty(out_name)) { tstring dmp_data = _T("\r\n") ; dmp_data+= r_data ; ::SaveText(out_name.c_str(),dmp_data) ; } } return true ; } //// // ******************************************************************************* // dump read data // Create : 2022/08/04 // ******************************************************************************* inline bool IR_save_read_data (c_tstring& url,c_tstring& read_dt_) { tstring tmp_file = ::IR_get_dump_path(url) ; tstring tmp_f_u8 = tmp_file + _T("_u8.htm") ; tstring tmp_f_sj = tmp_file + _T("_sj.htm") ; { tstring f_name = ::IR_get_dump_name(url) ; f_name = ::String_Change(f_name.c_str(),_T(".\\"),_T("")) ; f_name = ::String_Change(f_name.c_str(),_T("./"), _T("")) ; f_name = ::Path_GetAbbreviate(f_name,50) ; f_name = ::String_Change(f_name.c_str(),_T("\\"),_T("_")) ; f_name = ::String_Change(f_name.c_str(),_T("/"), _T("_")) ; f_name = ::Path_GetTitle(f_name) ; tstring tmp_path = ::Get_i_Tools_tmp_date() ; tmp_f_u8 = ::Path_AddLastSP(tmp_path) + f_name + _T("_u8.htm") ; tmp_f_sj = ::Path_AddLastSP(tmp_path) + f_name + _T("_sj.htm") ; } ::SaveS_JIS(tmp_f_sj.c_str(),read_dt_) ; ::SaveUTF8 (tmp_f_u8.c_str(),read_dt_) ; return ::SaveText (tmp_file.c_str(),read_dt_) ; } //// // ******************************************************************************* // compare // Create : 2022/08/25 // ******************************************************************************* inline bool IR_compare_string (c_tstring& last_dt,c_tstring& read_dt) { v_tstring old_ary = ::String_SplitLine(last_dt.c_str()) ; old_ary = ::SkipEmpty(old_ary) ; v_tstring new_ary = ::String_SplitLine(read_dt.c_str()) ; new_ary = ::SkipEmpty(new_ary) ; tstring old_str = ::String_Join_Line(old_ary) ; tstring new_str = ::String_Join_Line(new_ary) ; old_str = ::String_Change(old_str.c_str(),_T("https:"),_T("http:")) ; new_str = ::String_Change(new_str.c_str(),_T("https:"),_T("http:")) ; #ifdef _DEBUG { static u_32 Count = 0 ; Count++ ; tstring tmp_path = ::Get_i_Tools_tmp_date() ; tstring old_name = ::Now_Format(_T("%H%M-")) + ::u32to0t(Count,10,2) + _T("o.htm") ; tstring new_name = ::Now_Format(_T("%H%M-")) + ::u32to0t(Count,10,2) + _T("n.htm"); tstring old_path = ::Path_AddLastSP(tmp_path) + old_name ; tstring new_path = ::Path_AddLastSP(tmp_path) + new_name ; ::SaveText(old_path.c_str(),old_str) ; ::SaveText(new_path.c_str(),new_str) ; } #endif return (old_str == new_str) ; }