Поиск:

Ответ в темуСоздание новой темы Создание опроса
> API WinInet - Отказано в доступе и др ошибки... 
:(
    Опции темы
freebsdd
Дата 14.3.2011, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
freebsdd
Дата 16.3.2011, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Бьюсь не получается, один момент интересен, на Windows7 - InternetConnect иногда пишет GetLastError() = 0, а иногда GetLastError() = 5 (Зависимость не понял), на XP Всегда = 5, Есть идеи по Всему Проэкту? Хоть какие нибудь идеи, любые?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1127 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.