CInternetException, try und catch



  • Warum wird mir die Exception bei einem falschen Passwort nicht ausgeworfen?
    Ich verstehe es beim besten willen momentan nicht.

    CString strHeaders = _T("Content-Type: content=text/html; charset=windows-1252"); 
    
    CString strFormData = _T(r_connect);
    
    CInternetSession session; 
    
    CString error;
    CHttpConnection* pConnection;
    
    try
    {
      pConnection = session.GetHttpConnection(_T(r_ip),(INTERNET_PORT)80,r_user,r_password); 
    }
    catch (CInternetException *pIE) 
         { 
    error = getInetError(pIE->m_dwError);
    MessageBox(error);
    
         }
    
    //...
    //...
    
    CString CTest::getInetError(DWORD err)
        {
         HANDLE h = ::GetModuleHandle(_T("WinINet.dll"));
         if(h != NULL)
    	{ /* got module */
    	 LPTSTR p;
    	 if(::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
    			    FORMAT_MESSAGE_FROM_HMODULE,
    			    (LPCVOID)h,
    			    err,
    			    0, // default language
    			    (LPTSTR)&p,
    			    0,
    			    NULL) != 0)
    	    { /* format succeeded */
    	     CString s(p);
    	     s.Replace(_T("\r\n"), _T(""));
    	     return s;
    	    } /* format succeeded */
    	} /* got module */
    
         CString s;
         s.Format(_T("%d"), err);
         return s;
        } // getInetError
    

  • Mod

    Kann es sein, dass die Exception erst beim OpenRequest reworfen wird?



  • Hallo Martin,

    das habe ich auch schon versucht. Hier erhalte ich auch die Info, wenn
    die IP falsch ist. Allerdings gibt es nichts zurück bei falschem User
    oder Passwort! Zudem habe ich plötzlich das Problem, dass ich in einer
    MessageBox die Fehlerbeschreibung erhalte, obwohl SetErrorMode gesetzt
    ist und ich die Meldungen selbst behandeln will (Anzeige in IDC_EDIT2).

    Es soll ja auch laut MSDN das Verbinden als solches eine Exception
    zurückgeben können:

    CInternetSession::GetHttpConnection

    Return Value
    A pointer to a CHttpConnection object. If the call fails, determine the cause of the failure by examining the thrown CInternetException object.

    CString s ="";
    
    SetErrorMode(SEM_FAILCRITICALERRORS);
    
    CString r_ip = konfigdaten("Router-IP");
    CString r_connect = konfigdaten("Connect");
    CString r_disconnect = konfigdaten("Disconnect");
    CString r_user = konfigdaten("User");
    CString r_password = konfigdaten("Password");
    
    CString strHeaders = _T("Content-Type: content=text/html; charset=windows-1252"); 
    
    CString strFormData = _T(r_connect);
    
    CInternetSession session; 
    
    CHttpConnection* pConnection;
    
    try
    {
    pConnection = session.GetHttpConnection(_T(r_ip),(INTERNET_PORT)80,_T(r_user),_T(r_password)); 
     }
    catch (CInternetException *pIEx)
    {
     s = getInetError(pIE->m_dwError);
     GetDlgItem(IDC_EDIT2)->SetWindowText(s);
    }
    
    CHttpFile* pFile;
    
    try 
    {
      pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T(""));
    }
      catch (CInternetException *pIE)
      {
    	  s = getInetError(pIE->m_dwError);
    	  GetDlgItem(IDC_EDIT2)->SetWindowText(s);
      }
    
    bool result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
    


  • Hat niemand eine Idee was man noch versuchen könnte um die Fehler
    selbst anzeigen lassen zu können und zu prüfen, ob user/password
    richtig sind? 😞



  • Es gibt vermutlich keinen Weg zu prüfen ob GetHttpConnection
    erfolgreich war! Die einzige Chance ist SendRequest auszuwerten.
    Und da wird nur geprüft ob der Link abgesetzt werden konnte.
    Das wird in der Regel auch successfull sein. Man steht dann allerdings
    theoretisch vor dem Loginscreen, wenn Benutzer und Kennwort falsch waren 👎.

    Damit ist der Rückgabewert also auch wieder unbrauchbar 💡

    Wenn sich hier jemand findet der das wiederlegen kann, dann bitte...
    Aber es wird ganz einfach unmöglich sein zu prüfen ob alle Aufrufe erfolgreich
    waren!!!



  • Vermutung schrieb:

    Es gibt vermutlich keinen Weg zu prüfen ob GetHttpConnection
    erfolgreich war! Die einzige Chance ist SendRequest auszuwerten.
    Und da wird nur geprüft ob der Link abgesetzt werden konnte.
    Das wird in der Regel auch successfull sein. Man steht dann allerdings
    theoretisch vor dem Loginscreen, wenn Benutzer und Kennwort falsch waren 👎.

    Damit ist der Rückgabewert also auch wieder unbrauchbar 💡

    Wenn sich hier jemand findet der das wiederlegen kann, dann bitte...
    Aber es wird ganz einfach unmöglich sein zu prüfen ob alle Aufrufe erfolgreich
    waren!!!

    Ich befürchte ja fast, dass du da recht hast 😡
    Aber was soll das? Hat es sicherheitstechnische Hintergründe?


Anmelden zum Antworten