Новичок
Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.12.2010
Репутация: нет Всего: нет
|
Все Здравствуйте!.. Проблема: При запуске последовательно нажимаю кнопки 0, 1, 2, 3 (приведены ниже), в процессе нажатия в журнале (Журнал_1) пишется результат, метод POST и GET проходят, в случае если использую InternetErrorDlg, в ином случае пишет "Получено непредвиденное сообщение или оно имеет неправильный формат", Подскажите пожалуйста, кто знает в чём проблема? Ps0: Гугл очень помог, вообще всё это реализовать, существующую проблему в гугле найти не получилось... Ps1: Ниже приведён журнал соединений программы Журнал_1:: -0. Кнопка "Get Sertificat"- • Успешная загрузка сертификата, версия: 2 1. Кнопка "Open & Connect"- • InternetConnect, err > 0 - [5]::Отказано в доступе. 2. Кнопка "HttpOpenRequest"- • HttpOpenRequest[Error > 0]:: - [122]::Область данных, переданная по системному вызову, слишком мала. • HttpOpenRequest - OK...[122]::Область данных, переданная по системному вызову, слишком мала. • InternetSetOption = [5]::Отказано в доступе. 3. Кнопка "HttpSendRequest"- • HttpSendRequest - [12044]::Для проверки подлинности клиента требуется сертификат • InternetSetOption [iSert] = [87]::Параметр задан неверно. • Нужен сертификат? Получай!!, Погнали к q1;[5]::Отказано в доступе. • HttpSendRequest = FALSE;[2148074278]::Получено непредвиденное сообщение или оно имеет неправильный формат. Кнопка "Get Sertificat"Код | void __fastcall TForm1::BitBtn1Click(TObject *Sender) { //PCCERT_CONTEXT iSert;
String CertStore = cb1->Text.UpperCase(), Subject = cb2->Text;
PChar stor; HCERTSTORE store; DWORD encType, iSertOptions; PWideChar subj; //char* subj; HCRYPTPROV prov;
encType = PKCS_7_ASN_ENCODING || X509_ASN_ENCODING;
stor = StrAlloc(CertStore.Length() + 1); StrPCopy(stor, CertStore); store = CertOpenSystemStore(prov, CertStore.c_str()); StrDispose(stor);
//Memo1->Lines->Add("2 stor: " + String(stor) + "CertStore:: " + CertStore);
if(store == NULL) { ShowMessage("• CertOpenSystemStore::Error"); return; }
subj = (PWideChar)HeapAlloc(HeapCreate(HEAP_NO_SERIALIZE,7,7),HEAP_ZERO_MEMORY,7);
StringToWideChar(Subject, subj, 2 * Subject.Length() + 1);
//Memo1->Lines->Add("3" + String(subj) + ", ::Subject: " + String(Subject));
//// WORKING !!!!!!! iSert = CertFindCertificateInStore(store, encType, 0, CERT_FIND_SUBJECT_STR, subj, NULL);
iSert = NULL; iSert = CertEnumCertificatesInStore(store, iSert);
if(GetLastError()>0) Memo1->Lines->Add("CertFindCertificateInStore::Error [" + String(GetLastError()) + "] - " + GetTextError(GetLastError()));
if(iSert == NULL) { //Memo1->Lines->Add("CertFindCertificateInStore::NULL"); Memo1->Lines->Add("Ошибка, Сертификат Вероятно не найден..."); return; } else { //Memo1->Lines->Add("CertFindCertificateInStore::BIEN!.."); Memo1->Lines->Add("• Успешная загрузка сертификата - " + String(Subject) + ", версия: " + String(iSert->pCertInfo->dwVersion)); }
//iSertOptions = SECURITY_FLAG_IGNORE_UNKNOWN_CA || INTERNET_OPTION_SECURITY_CERTIFICATE || INTERNET_OPTION_CLIENT_CERT_CONTEXT;
BitBtn1->Enabled = false; BitBtn2->Enabled = true;
}
|
Кнопка "Open & Connect"Код | //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn5Click(TObject *Sender) { String fHost, url; INTERNET_PORT fPort;
url = cb_host->Text + cb_script->Text; fHost = GetHostName(url); //fHost = cb_host->Text.Trim();
//Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.1) hInternet = InternetOpen("Mozilla", //"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.2914)", INTERNET_OPEN_TYPE_PRECONFIG, //INTERNET_OPEN_TYPE_DIRECT , //INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, //INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL); // 0 //INTERNET_FLAG_ASYNC || INTERNET_FLAG_FROM_CACHE || INTERNET_FLAG_OFFLINE
if(GetLastError()>0) Memo1->Lines->Add("• InternetOpen::Error #" + String(GetLastError()));
if(hInternet) { Memo1->Lines->Add("• InternetOpen - OK..." + String(GetLastError())); } else Memo1->Lines->Add("• InternetOpen - Error..." + String(GetLastError()));
if(cb_port->ItemIndex == 0) fPort = INTERNET_DEFAULT_HTTPS_PORT; else if(cb_port->ItemIndex == 1) fPort = INTERNET_DEFAULT_HTTP_PORT; else fPort = (WORD)cb_port->Text.ToInt();
Memo1->Lines->Add(" _fHost=" + fHost); Memo1->Lines->Add(" _fPort=" + String(fPort)); //INTERNET_DEFAULT_HTTPS_PORT hConnect = InternetConnect(hInternet,fHost.c_str(),fPort, NULL,NULL,INTERNET_SERVICE_HTTP,0,1);
if(GetLastError()>0) { Memo1->Lines->Add("• InternetConnect, err > 0 - " + GetTextError(GetLastError())); //Memo1->Lines->Add("InternetConnect::Text:: " + GetTextError(GetLastError())); }
if(hConnect) { Memo1->Lines->Add("• InternetConnect - OK..." + String(GetLastError())); } else { Memo1->Lines->Add("• InternetConnect - Error..." + String(GetLastError())); }
}
|
Кнопка "HttpOpenRequest"Код | //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn7Click(TObject *Sender) { String fmethod, fScript, url, fHost; Cardinal Flags_connection,Flags_Request,flags_security;
url = cb_host->Text + cb_script->Text; fHost = GetHostName(url); fScript = GetScriptName(url,fHost); fmethod = cb_method->Text.Trim().UpperCase();
int ierr = 0;
Form1->SetFlags(url,Flags_connection,Flags_Request);
/* ------------------------- WORKING!!!!!!!.. -------------------------------
//hConnect hInet hRequest = HttpOpenRequest(hConnect, fmethod.c_str(), // TEXT("GET") POST fScript.c_str(), NULL, //HTTP_VERSION //NULL NULL, 0, // NULL INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA | INTERNET_FLAG_NO_COOKIES,
//INTERNET_FLAG_SECURE, //Flags_Request, //INTERNET_FLAG_SECURE, //INTERNET_FLAG_RELOAD || INTERNET_FLAG_IGNORE_CERT_CN_INVALID || INTERNET_FLAG_NO_CACHE_WRITE || INTERNET_FLAG_SECURE || INTERNET_FLAG_PRAGMA_NOCACHE || INTERNET_FLAG_KEEP_CONNECTION, 0); */
hRequest = HttpOpenRequest(hConnect, fmethod.c_str(), // TEXT("GET") POST fScript.c_str(), NULL, //HTTP_VERSION //NULL NULL, 0, // NULL Flags_Request, //INTERNET_FLAG_SECURE, //Flags_Request, //INTERNET_FLAG_SECURE, //INTERNET_FLAG_RELOAD || INTERNET_FLAG_IGNORE_CERT_CN_INVALID || INTERNET_FLAG_NO_CACHE_WRITE || INTERNET_FLAG_SECURE || INTERNET_FLAG_PRAGMA_NOCACHE || INTERNET_FLAG_KEEP_CONNECTION, 0);
ierr = GetLastError();
if (ierr == ERROR_INTERNET_INVALID_CA) ShowMessage("ERROR_INTERNET_INVALID_CA!!!!!!!"); //InetGetLastResp if(ierr>0) Memo1->Lines->Add("• HttpOpenRequest[Error > 0]:: - " + GetTextError(ierr));
if(hRequest) { Memo1->Lines->Add("• HttpOpenRequest - OK..." + GetTextError(ierr));
//ShowMessage("3");
DWORD dwSeqFlags = 0; DWORD dwBuffLen = sizeof(dwSeqFlags); InternetQueryOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwSeqFlags, &dwBuffLen);
//ShowMessage("4"); /* dwSeqFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID; */
// !!!!!!!!!!!!!!!!!!! GGGGUUUUUUUUTTTTTTTTT !!!!!!!!!!!!!!!!!!!!!!!!!!! dwSeqFlags = SECURITY_FLAG_IGNORE_UNKNOWN_CA | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | SECURITY_FLAG_FORTEZZA | SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP | SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
//ShowMessage("5");
InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwSeqFlags, sizeof (dwSeqFlags) );
//ShowMessage("6"); Memo1->Lines->Add("• InternetSetOption = " + GetTextError(GetLastError())); } else { Memo1->Lines->Add("• HttpOpenRequest - FALSE..." + GetTextError(ierr)); } }
|
Кнопка "HttpSendRequest"Код | //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn8Click(TObject *Sender) { unsigned long dwBytesRead=0, L=0; char cBuffer[1024]; int iErr = 0;
AnsiString fmethod, fScript, url, fHost, iHeader;
url = cb_host->Text + cb_script->Text; fHost = GetHostName(url); fScript = GetScriptName(url,fHost); /* iHeader = "Content-Type:text/xml; charset=windows-1251" + String(char(13)) + String(char(10)) + "Accept: text/xml" + String(char(13)) + String(char(10)) + "Content-Length: " + String(fScript.Length()); */
iHeader = "Content-Type:*/*" + String(char(13)) + String(char(10)) + "Accept: text/xml" + String(char(13)) + String(char(10)) + "Content-Length: " + String(fScript.Length());
//ShowMessage(iHeader);
//q = HttpSendRequest(hRequest, iType_Access.c_str(),iType_Access.Length(),fScript.c_str(),fScript.Length());
/////////bool e = HttpSendRequest(hRequest, NULL, 0, NULL, 0); //ShowMessage("0");
q1: bool e = HttpSendRequest(hRequest, iHeader.c_str(), iHeader.Length(), fScript.c_str(),fScript.Length());
//bool e = HttpSendRequest(hRequest, iHeader.c_str(), -1, fScript.c_str(), fScript.Length()); iErr = GetLastError();
/*
if (::HttpSendRequest( m_hRequest, m_lpszDefaultHeader, -1, (LPVOID)lpszData, lpszData? _tcslen(lpszData): 0) )
*/
//ShowMessage("1");
DataAvailable(hRequest, L); // нужен просто для информации
//ShowMessage("2");
goto w1; // Пока не нужно, пропускаем if(hRequest) // e == true { ShowMessage("3");
DWORD dwSeqFlags = 0; DWORD dwBuffLen = sizeof(dwSeqFlags); InternetQueryOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwSeqFlags, &dwBuffLen);
//ShowMessage("4");
dwSeqFlags = SECURITY_FLAG_IGNORE_UNKNOWN_CA || INTERNET_FLAG_IGNORE_CERT_CN_INVALID || INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
//ShowMessage("5");
InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwSeqFlags, sizeof (dwSeqFlags) );
//ShowMessage("6"); Memo1->Lines->Add("• InternetSetOption = " + GetTextError(GetLastError())); }
Application->ProcessMessages();
w1:
if((iErr == 12044)) // || (iErr == 12045) { Memo1->Lines->Add("• HttpSendRequest - " + GetTextError(iErr));
if(RadioButton2->Checked == true) { // INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT DWORD dwCert = 0; // INTERNET_OPTION_CLIENT_CERT_CONTEXT sizeof(PCCERT_CONTEXT) sizeof(iSert) InternetSetOption(hRequest, INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT, &iSert, sizeof(iSert)); //InternetSetOption(m_hRequest, INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT, &dwCert, sizeof(dwCert));
Memo1->Lines->Add("• InternetSetOption [iSert] = " + GetTextError(GetLastError()));
Memo1->Lines->Add("• Нужен сертификат? Получай!!, Погнали к q1;" + GetTextError(GetLastError()));
goto q1; }
if(RadioButton1->Checked == true) { if( InternetErrorDlg( GetDesktopWindow(), hRequest, ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED, FLAGS_ERROR_UI_FILTER_FOR_ERRORS || FLAGS_ERROR_UI_FLAGS_GENERATE_DATA || FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, NULL) == ERROR_SUCCESS ) goto q1; } }
if(e == true) { Memo1->Lines->Add("• HttpSendRequest = TRUE;" + GetTextError(iErr)); Memo1->Lines->Add("• Начнём чтение 'Интернет-файла'...");
if(InternetReadFile(hRequest,(LPSTR)cBuffer,(DWORD)1024,&dwBytesRead)) Memo1->Lines->Add("• Читаем...");
Form1->Memo1->Lines->Add("dwBytesRead::" + String(dwBytesRead)); Form1->Memo1->Lines->Add("L::" + String(L)); Form1->Memo1->Lines->Add(cBuffer); } else Memo1->Lines->Add("• HttpSendRequest = FALSE;" + GetTextError(iErr)); }
|
Это сообщение отредактировал(а) freebsdd - 18.3.2011, 14:33
|