Como complemento al truco publicado, " Autentificarnos en un proxy", pedemos pedir la autentificación, de esta forma obligamos a que el usuario se sepa la contraseña.
La función en C/C++ sería esta:
#pragma link "$(BCB)\\lib\\PSDK\\Wininet.lib" void Authenticate(HWND hWnd, char *URL) { HINTERNET hInet, hConnect, hRequest; DWORD dwErrorCode; char *URL = strnewdup(_URL); if(!strnicmp(URL, "http://", 7)) URL += 7; char *C = strchr(URL, '//'); if(C) *C = 0; hInet = InternetOpen("Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); hConnect = InternetConnect(hInet, URL, INTERNET_INVALID_PORT_NUMBER, NULL, NULL, INTERNET_SERVICE_HTTP, 0,0); hRequest = HttpOpenRequest(hConnect, "GET", "", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0); HttpSendRequest(hRequest, NULL, 0, NULL, 0); dwErrorCode = hRequest ? ERROR_SUCCESS : GetLastError(); InternetErrorDlg(hWnd, hRequest, dwErrorCode, FLAGS_ERROR_UI_FILTER_FOR_ERRORS | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA, NULL); delete URL; InternetCloseHandle(hInet); InternetCloseHandle(hConnect); InternetCloseHandle(hRequest); }
hWnd: Es la ventana padre del cuadro de dialogo de autentificación.
URL: Es una URL completa y válida.
Obtendremos un diálogo que nos pedirá autentificarnos. Una vez autenrificados, la autentificación persiste durante toda la vida de la aplicación.
Eljemplo de uso:
Authenticate(Handle, "http://www.google.es");
En el siguiente mensaje publico una versión para delphi.
Espero que sea de utilidad.
Saludos.
PD: Actualizo el código para admitir direcciones IP