Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2023
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: 290
Poder: 21
elrayo76 Va por buen camino
Saber si un sitio web usa HTTP o HTTPS

Buenas gente, espero que estén bien.

Hoy me trae hasta acá la siguiente consulta. Estoy usando los componentes Indy en Delphi 11.2 y necesito ver como detectar si el sitio que quiero descargar usa HTTP o HTTPS para en caso de que use HTTPS poder configurar correctamente la seguridad del mismo.

Les comento que he buscado en los foros e Internet y todo es algo viejo y solo hay código usando HTTP nadie hace referencia de como verificar si es uno u otro protocolo.

Lo que encontré dentro de los fuentes de Indy es que verifican si el sitio comienza con HTTP o HTTPS pero no me convence mucho porque si el usuario no se lo pone como lo identifico.

Pensé en ponerle yo delante HTTP y verificar si puedo descargarla y si anda bien listo, pero si da error verificar por HTTPS (o tomar directamente que es un protocolo seguro). Esto no me convence mucho porque creo que no sería lo mejor.

Espero que alguien tenga alguna otra forma de hacerlo.

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

Última edición por elrayo76 fecha: 18-04-2023 a las 01:36:29. Razón: Eliminé los espacio de mas que agrega cuando se envia el formulario desde Firefox (no importa la versión)
Responder Con Cita
  #2  
Antiguo 18-04-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Con el URL del sitio.

https://www.clubdelphi.com/

http://www.imss.gob.mx/


Si necesitas una función puedes utilizar esta mandandole el URL del sitio web:

Código Delphi [-]
uses
  IdURI;

function IsHTTPS(const AURL: string): Boolean;
var
  URI: TIdURI;
begin
  URI := TIdURI.Create(AURL);
  try
    Result := SameText(URI.Protocol, 'https');
  finally
    URI.Free;
  end;
end;


Ejemplo de uso:
Código Delphi [-]
if IsHTTPS('https://www.ejemplo.com') then
begin
  // El sitio utiliza HTTPS
end
else
begin
  // El sitio utiliza HTTP
end;
La función la genero ChatGPT
Responder Con Cita
  #3  
Antiguo 20-04-2023
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: 290
Poder: 21
elrayo76 Va por buen camino
Gracias por responder pgranados. Igualmente lo que pasaste funciona a medias y te cuento porque.

He probado con solo pasarle como URL www.clubdelphi.com sin incluir HTTPS y da como que la URL es sin seguridad (HTTP). El tema por lo que pude ver en el código de las Indy es que utiliza lo que le pongas delante HTTPS (para indicar que tiene seguridad ) o HTTP (sin seguridad). Si no se le pasa nada y tiene seguridad lo toma como que no tiene porque no detecta el HTTPS delante.

A mi modo de verlo si no existe una forma verdadera de validar esto sería intentar devolver o enviar los datos por HTTPS y si da error atraparlo y mandarlo por HTTP. También se puede hacer mandar por HTTP y si da error atraparlo y usar HTTPS.

¿Como es que hacen entonces los navegadores para con solo pasar www.clubdelphi.com saber si tienen que agregar HTTPS o HTTP para poder mostrar el sitio

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

Última edición por elrayo76 fecha: 20-04-2023 a las 02:01:19. Razón: Se le saca las líneas en blanco que agrega desde el navegador Firefox
Responder Con Cita
  #4  
Antiguo 20-04-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por elrayo76 Ver Mensaje
¿Como es que hacen entonces los navegadores para con solo pasar www.clubdelphi.com saber si tienen que agregar HTTPS o HTTP para poder mostrar el sitio

Saludos,
El Rayo
Eso lo responde el DNS. Que *puede*, por defecto, responder "http" aunque el sitio ADEMAS soporte "https". Algunos DNS hacen la redirecion "forzada" y siempre devuelven "https".

Osea: No existe una forma "simple". Pero la solución es como te la pasan: Primero checas por "https" y luego por "http". Es la mas segura de que resulte.
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 20-04-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Cita:
Empezado por elrayo76 Ver Mensaje
Gracias por responder pgranados. Igualmente lo que pasaste funciona a medias y te cuento porque.

He probado con solo pasarle como URL www.clubdelphi.com sin incluir HTTPS y da como que la URL es sin seguridad (HTTP). El tema por lo que pude ver en el código de las Indy es que utiliza lo que le pongas delante HTTPS (para indicar que tiene seguridad ) o HTTP (sin seguridad). Si no se le pasa nada y tiene seguridad lo toma como que no tiene porque no detecta el HTTPS delante.

A mi modo de verlo si no existe una forma verdadera de validar esto sería intentar devolver o enviar los datos por HTTPS y si da error atraparlo y mandarlo por HTTP. También se puede hacer mandar por HTTP y si da error atraparlo y usar HTTPS.

¿Como es que hacen entonces los navegadores para con solo pasar www.clubdelphi.com saber si tienen que agregar HTTPS o HTTP para poder mostrar el sitio

Saludos,
El Rayo
Hice pruebas en mi equipo y funciono lo siguiente (te paso el código mañana, olvide mi laptop)

Crea un WebBrowser y la propiedad navigate asigna la url, ejemplo: www.clubdelphi.com en algun evento, puede ser formCreate de ejemplo, despues busca en el webBrowser un evento donde el sitio web ya fue cargado (no recuerdo el nombre) y manda a llamar esta funcion

Código Delphi [-]
function ObtenerURL(WebBrowser: TWebBrowser): string;
var
  Doc: IHTMLDocument2;
  ShellBrowser: IWebBrowser2;
begin
  Result := '';
  ShellBrowser := (WebBrowser.ControlInterface as IWebBrowser2);
  if Assigned(ShellBrowser.Document) and Supports(ShellBrowser.Document, IHTMLDocument2, Doc) then
    Result := Doc.location.href;
end;

Donde Result es la URL completa del sitio y te regresara: https://www.clubdelphi.com/ , ya con el resultado solamente verifica si las primeras posiciones del string son HTTPS o HTTP y listo.


No es una forma elegante y en mi punto de vista hasta se me hace exagerado, pero creo que es la forma mas sencilla de lograr lo que quieres.

Saludos.
Responder Con Cita
  #6  
Antiguo 20-04-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
No hay que complicarse. Lo que dije es exactamente lo que pasa y como resolverlo. Si miran como funciona "por debajo":

Esto pasa con clubdelphi:

Cita:
➜ curl -v www.clubdelphi.com
* Trying 87.98.231.4:80...
* Connected to www.clubdelphi.com (87.98.231.4) port 80 (#0)
> GET / HTTP/1.1
> Host: www.clubdelphi.com
> User-Agent: curl/7.87.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< date: Thu, 20 Apr 2023 15:19:39 GMT
< content-type: text/html; charset=iso-8859-1
< content-length: 235
< server: Apache
< location: https://www.clubdelphi.com/
Como ven, se generaran DOS solicitudes, una a "http" y luego el cliente que sigue los "redirect (301 Moved Permanently)" luego hara "https" (Esto es lo que hace un navegador web.) porque el DNS y/o el servidor web esta configurado para ello.

Pero eso no siempre sucede. Asi que simplemente inviertan el asunto y haz "https" primero.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 21-04-2023
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: 290
Poder: 21
elrayo76 Va por buen camino
Bueno, gracias por las respuestas. Entonces verificare primero por HTTP y si no funciona por HTTPS.


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



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Synapse, Https y Proxy D-MO Internet 3 22-08-2012 22:41:32
¿obligado a utilizar https? manuc HTML, Javascript y otros 6 02-01-2011 23:18:18
HTTP GET y HTTP POST utilizando WinInet dec Trucos 6 08-09-2008 11:52:03
NMHTTP vs HTTPS chona Internet 0 01-06-2005 21:49:04
Validar peticion https felixgo Internet 1 11-05-2005 23:07:11


La franja horaria es GMT +2. Ahora son las 20:52:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi