Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-08-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: Aug 2013
Ubicación: Argentina
Posts: 1.858
Poder: 9
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
TWebBrowser, OAuth y reCaptcha

Saludos a todos, me encuentro con una dificultad que me tiene algo atonito


Estoy intentando crear una biblioteca orientada a objetos para la API Rest de Mercado Libre

Leyendo la documentacion, veo que una ves registrada nuestra aplicacion y obtenido un "ID", debemos implementar autorizacion mediante OAuth

Para ello, lo unico que hay que hacer, es abrir un navegador de internet, ir a cierta url, y luego si el usuario se logea correctamente, se lo redirige a otra url que yo mismo puedo especificar, y al final le agrega el token de autorizacion generado para que yo lo capture.

La famosa Url en cuestion es la siguiente:


En donde mi Client ID es: 2010039294220063 (no tengo problemas en compartirlo porque es solo de prueba)

Si hago las pruebas desde un navegador cualquiera (Chrome, Vivaldi, Internet Explorer) el proceso es exitoso y cuando inicio sesion en Mercado Libre me envia a "https://www.google.com.ar/aca-un-string-que-es-el-token" y todo perfecto

Ahora bien, quiero hacer lo mismo desde Delphi y no puedo.

He creado una aplicacion vacia, coloque un TWebBrowser y luego invoque al metodo Navigate, con la URL que deje arriba

La pagina de Mercado Libre se muestra, en esta instancia, correctamente y puedo colocar usuario y contraseña. Pero el problema es cuando aparece el bendito captcha: En realidad el captcha no aparece. Con captcha me refiero al "chirimbolo" ese que te dice que le hagas click para demostrar que no sos un robot. Ok, el bendito captcha no aparece y no puedo iniciar sesion y seguir con el proceso

Por si no soy claro, esto es lo que veo desde Chrome por ejemplo:



Esto veo desde Delphi (siempre estamos hablando de la misma URL)



Lo mas chistoso es que si uno insiste y decide volver a poner usuario y contraseña y hace click en "Ingresar", aparece la leyenda de error de "haga click en el cuadro para continuar", como se ve en la imagen y que es lo que ocurre cuando no tildas el captcha

Por supuesto que algun error aparece, es uno de esos errores del Internet Explorer (tengo entendido que el TWebBrowser envuelve IE). Ninguna expcecion es generada en tiempo de ejecucion. El error (o mas bien advertencia, tiene el cartelito con el signo de admiracion y fondo amarillo) es este:




Agradezco enormemente si alguien puede darme una mano
Responder Con Cita
  #2  
Antiguo 10-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.617
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Lo primero que yo probaría sería indicar a Windows que nuestro "WebBrowser" ha de emular una versión más o menos "moderna" de Internet Explorer. Por ejemplo, la siguiente unidad (copiada aquí ahora un poco deprisa, creo que funcionará sin cambio alguno) lo que hace es indicar que nuestro "WebBrowser" quiere comportarse como un Internet Explorer 11, si es que este se encuentra instalado en el sistema.

Código Delphi [-]
unit IEBrowserFix;

interface

type
  TIEBrowserFix = class(TObject)
  public
    class procedure Initialize();
    class procedure Uninitialize();
  end;

implementation

uses
  Windows, SysUtils, Registry;

const
  REG_KEY = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';

  { TIEBrowserFix }

class procedure TIEBrowserFix.Initialize();
const
  // http://msdn.microsoft.com/en-us/libr...wser_emulation
  MAGIC_CONSTANT = 11001;
var
  exeName: string;
begin
  exeName := ExtractFileName(ParamStr(0));
  with TRegistry.Create() do
    try
      RootKey := HKEY_CURRENT_USER;
      if OpenKey(REG_KEY, true) then
      begin
        if not ValueExists(exeName) then
          WriteInteger(exeName, MAGIC_CONSTANT);
        CloseKey();
      end;
    finally
      Free();
    end;
end;

class procedure TIEBrowserFix.Uninitialize();
var
  exeName: string;
begin
  exeName := ExtractFileName(ParamStr(0));
  with TRegistry.Create() do
    try
      RootKey := HKEY_CURRENT_USER;
      if OpenKey(REG_KEY, false) then
      begin
        if ValueExists(exeName) then
          DeleteValue(exeName);
        CloseKey();
      end;
    finally
      Free();
    end;
end;

initialization
  TIEBrowserFix.Initialize();

finalization
  TIEBrowserFix.Uninitialize();

end.

Creo que eso ya podría solucionar el problema, Agustín. Si no es así, tal vez podamos intentar alguna otra cosa.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 10-08-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: Aug 2013
Ubicación: Argentina
Posts: 1.858
Poder: 9
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
David, genio, funciona excelente.

Nunca se me hubiese ocurrido que podria ser eso.

Lo mas probable es que si consigo completar esta biblioteca la publique. Podria incluir esta unidad de codigo en ella? Y adaptarla de acuerdo a mi estilo particular?
Responder Con Cita
  #4  
Antiguo 10-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.617
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola Agustín,

Me alegro de que funcionase. Por supuesto, puedes adaptar el código a tus necesidades. De hecho la unidad de más arriba lo que hace es añadir en el registro la clave correspondiente al iniciarse el programa, y, borrar dicha clave cuando el programa se cierra. No hay nada de particuar ahí, lo que tenemos que hacer es escribir la clave de marras en el registro.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #5  
Antiguo 11-08-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: Aug 2013
Ubicación: Argentina
Posts: 1.858
Poder: 9
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Bueno al menos la parte del OAuth ya esta funcionando bien y se puede recuperar facilmente el token

Aca esta el codigo que lo implementa y hay demo para Vcl y FMX

https://github.com/ortuagustin/Delph.../Mercado Libre

Saludos!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
TWebBrowser Rockin Internet 2 27-11-2007 20:41:29
TWebBrowser sin URL rafa_adrim Internet 1 20-10-2006 18:02:05
TWebBrowser albertoP Internet 0 28-04-2006 21:04:24
TWebBrowser ElCorbata Internet 2 11-11-2004 11:11:46
TWebBrowser RoyTan Internet 4 27-10-2003 22:06:09


La franja horaria es GMT +2. Ahora son las 15:34:16.


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