void __fastcall TForm1::Button1Click(TObject *Sender) { HINTERNET hOpen,hConnect,hReq; DWORD dwError; BOOL OK1=false,OK2=false; AnsiString S="",S1,S2; int p; if (!CheckBox2->Enabled) { bpass=Edit2->Text; Edit2->Text=AnsiString::StringOfChar('*',bpass.Length()); } hOpen=InternetOpen( "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914) ", INTERNET_OPEN_TYPE_PRECONFIG,0,0,0); hConnect=InternetConnect (hOpen, // обработчик InternetOpen "62.165.62.109", // Имя сервера (crypt.infocentr.ru) INTERNET_DEFAULT_HTTPS_PORT,// По умолчанию HTTPS порт - 443 Edit1->Text.c_str(), // Имя пользователя bpass.c_str(), // Пароль пользователя INTERNET_SERVICE_HTTP, // Сервис 0, // Флаги 0); // Контекст hReq=HttpOpenRequest (hConnect, // Обработчик InternetConnect "GET", // Метод "/cgi-bin/stat/stat.cgi", // Имя объекта HTTP_VERSION, // Версия "", // Ссылка (Referer) NULL, // Дополнительные заголовки INTERNET_FLAG_SECURE| INTERNET_FLAG_KEEP_CONNECTION| INTERNET_FLAG_IGNORE_CERT_CN_INVALID| INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, // Флаги 0); // Контекст Again: if (HttpSendRequest(hReq,NULL,0,NULL,0)) { OK1=true; char szData[1024]; DWORD dwBytesRead; for (;;) { BOOL bRead=InternetReadFile(hReq,szData,sizeof(szData)-1,&dwBytesRead); if (bRead==FALSE||dwBytesRead==0) break; szData[dwBytesRead]=0; int wbuflen = MultiByteToWideChar(CP_KOI8R, 0, szData, -1, 0, 0); WCHAR * wbuf = new WCHAR[wbuflen]; MultiByteToWideChar(CP_KOI8R, 0, szData, -1, wbuf, wbuflen); int buflen = WideCharToMultiByte(1251, 0, wbuf, -1, 0, 0, NULL, NULL); char * buf = new char[buflen]; WideCharToMultiByte(1251, 0, wbuf, -1, buf, buflen, NULL, NULL); delete [] wbuf; S+=buf; delete [] buf; } if (!S.Pos("401 Authorization Required")) { OK2=true; p=S.Pos("")+8; S=S.SubString(p,S.Length()-p); p=S.Pos("Договор")+16; S=S.SubString(p,S.Length()-p); Edit3->Text=S.SubString(1,S.Pos("<")-1); p=S.Pos("(ФИО)")+14; S=S.SubString(p,S.Length()-p); Edit4->Text=S.SubString(1,S.Pos("<")-1); p=S.Pos("")+8; S=S.SubString(p,S.Length()-p); StringGrid1->RowCount=2; StringGrid1->Cells[0][1]=""; StringGrid1->Cells[1][1]=""; AnsiString BS=""; bool flg=false; for (;;) { p=S.Pos("")+1; S=S.SubString(p,S.Length()-p); S1=S.SubString(1,S.Pos("<")-1); p=S.Pos("right>")+6; S=S.SubString(p,S.Length()-p); S2=S.SubString(1,S.Pos("<")-1); if (flg) StringGrid1->RowCount++; StringGrid1->Cells[0][StringGrid1->RowCount-1]=S1; StringGrid1->Cells[1][StringGrid1->RowCount-1]=S2; if (flg) BS+="\n"; BS+=S1+" "+S2; flg=true; } abfTrayIcon1->Hint=BS; } } else dwError = GetLastError(); if ((!OK1)&&(dwError==ERROR_INTERNET_INVALID_CA)) { DWORD dwFlags; DWORD dwBuffLen=sizeof(dwFlags); InternetQueryOption(hReq,INTERNET_OPTION_SECURITY_FLAGS,(LPVOID)&dwFlags,&dwBuffLen); dwFlags|=SECURITY_FLAG_IGNORE_UNKNOWN_CA; InternetSetOption(hReq,INTERNET_OPTION_SECURITY_FLAGS,&dwFlags,sizeof(dwFlags)); goto Again; } InternetCloseHandle(hReq); InternetCloseHandle(hConnect); InternetCloseHandle(hOpen); if (!OK1) MessageBox(0,"Ошибка подключения","Ошибка",MB_ICONERROR); if (OK1&&!OK2) MessageBox(0,"Неверное имя пользователя или пароль","Ошибка",MB_ICONERROR); if (OK2) { LPValid=true; CheckBox1->Enabled=true; CheckBox2->Enabled=true; Timer1->Enabled=true; Edit5->Enabled=true; } else { LPValid=false; CheckBox1->Checked=false; CheckBox2->Checked=false; CheckBox1->Enabled=false; CheckBox2->Enabled=false; Timer1->Enabled=false; Edit5->Enabled=false; } }