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
-
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?