Ver Mensaje Individual
  #2  
Antiguo 25-01-2020
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 305
Reputación: 23
elrayo76 Va camino a la fama
Como veo que nadie tiene una respuesta les paso algo mas de info a ver si se aclara lo que necesito.


El tema es que tengo una función como la que pongo y que fue tomada de otro foro.



Código Delphi [-]
function AuthenticateProxy(aURL: PChar; const aUserName, aPassword: String): Boolean;
var
  poiInternetOpen: HINTERNET;
  poiInternetConnect: HINTERNET;
  poiInternetRequest: HINTERNET;
  recUrlComponents: URL_COMPONENTS;
  dwdStatus: DWORD;
  dwdStatusSize: DWORD;
  i: DWORD;

begin
  Result := False;
  dwdStatusSize := SizeOf(dwdStatus);

  // Con esto se puede usar una dirección o una IP para llegar al destino.
  ZeroMemory(@recUrlComponents, SizeOf(URL_COMPONENTS));
  recUrlComponents.dwStructSize := SizeOf(URL_COMPONENTS);
  recUrlComponents.dwHostNameLength := INTERNET_MAX_HOST_NAME_LENGTH;

  // Descompone una URL en las partes que la componen.
  // Más información ver: https://docs.microsoft.com/en-us/win...ernetcrackurla
  InternetCrackUrl(aURL, Length(aURL) + 1, 0, recUrlComponents);
  // Inicializa el uso de una aplicación de las funciones WinInet.
  // Más información ver: https://docs.microsoft.com/en-us/win...-internetopena
  poiInternetOpen := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  // Abre una sesión del File Transfer Protocol (FTP) o HTTP.
  // Más información ver: https://docs.microsoft.com/en-us/win...ternetconnecta
  poiInternetConnect := InternetConnect(poiInternetOpen, recUrlComponents.lpszHostName, INTERNET_INVALID_PORT_NUMBER,
    nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
  // Crea el request de HTTP.
  // Más información ver: https://docs.microsoft.com/en-us/win...tpopenrequesta
  poiInternetRequest := HttpOpenRequest(poiInternetConnect, 'GET', recUrlComponents.lpszHostName, nil, nil, nil, INTERNET_FLAG_KEEP_CONNECTION, 0);

  for i := 0 to 1 do
  begin
      // Envia el request específico al servidor HTTP
      // Más información ver: https://docs.microsoft.com/en-us/win...tpsendrequesta
      HttpSendRequest(poiInternetRequest, nil, 0, nil, 0);
      // Recibe la información del encabezado (header) asociado con el request HTTP.
      // Más información ver: https://docs.microsoft.com/en-us/win...httpqueryinfoa
      HttpQueryInfo(poiInternetRequest, HTTP_QUERY_FLAG_NUMBER or HTTP_QUERY_STATUS_CODE, @dwdStatus, dwdStatusSize, PCardinal(0)^);

      // Se requiere autentificación en el Proxy o en el servidor
      if (dwdStatus = HTTP_STATUS_PROXY_AUTH_REQ) or (dwdStatus = HTTP_STATUS_DENIED) then
      begin
        // Setea las opciones de Internet.
        // Más información ver: https://docs.microsoft.com/en-us/win...rnetsetoptiona

        // Introducimos UserName.
        InternetSetOption(poiInternetRequest, INTERNET_OPTION_PROXY_USERNAME, PChar(aUserName), Length(aUserName) + 1);
        // Introducimos el Password.
        InternetSetOption(poiInternetRequest, INTERNET_OPTION_PROXY_PASSWORD, PChar(aPassWord), Length(aPassWord) + 1);
      end;
  end;

  InternetCloseHandle(poiInternetOpen);
  InternetCloseHandle(poiInternetConnect);
  InternetCloseHandle(poiInternetRequest);

  Result := (dwdStatus <> HTTP_STATUS_PROXY_AUTH_REQ) and (dwdStatus <> HTTP_STATUS_DENIED);
end;


Esto lo que hace es autenticar una URL pasando por el proxy. Con esto también podríamos decir que sabemos si se tiene conexión a internet si es que no se puede llegar a la URL.


El caso es que no se como hacer lo mismo pero para direcciones que están en servidores con IPv6. Todo esto por lo expuesto en mi primer mensajes.


Lo único que se me ocurrió es cuando la función toma la URL que se le agregue los corchetes y validar por IPv6, si todo sale bien es que hay internet contra el servidor ese, en caso de error validar por IPv4. Pero mi pregunta es la siguiente, ¿esta función funciona con IPv6?


¿Los navegadores cuando uno ingresa la URL y la tienen que mostrar primero agregan los corchetes para ver si existe en un servidor IPv6 para luego según el resultado salir a buscar en un servidor de IPv4?



Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita