Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Question TIdHTTP - Como me autentifico

Hola, necesito utilizar desde mi programa realiazo en delphi5 unos web services. Esto es algo nuevo para mi. He estado leyendo algunos hilos, recopilando información y he realizado el siguiente codigo de prueba utilizando un componente Indy.

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  http: TIdHttp;
  respuesta: string;
  datosPost: TIdMultiPartFormDataStream;
begin
  http:= TIdHTTP.Create(Self);
  http.Request.Username:= 'usuario';
  http.Request.Password:= 'clave';
  datosPost := TIdMultiPartFormDataStream.Create;
  try
   datosPost.AddFormField('description', 'ejemplo1');
   datosPost.AddFormField('comments', 'firmar documento de prueba');
   datosPost.AddFormField('reference', '1');
   datosPost.AddFormField('file', 'C:\firmar1.pdf');

   respuesta := http.Post('www.direcionwebservice', datospost);
  finally
    http.Free;
    datospost.free;
  end;

  showmessage(respuesta);

end;
Según me comenta el proveedor del web services (me ha facilitado la estructura de los datos que debo incluir en el post) antes de realizar el post hay que autentificarse según la autenticación HTTP básica estándar. Por lo que he leido he entendido que esto lo realiza directamente el componente indy y únicamente tengo que pasarle el usuario y la clave, como pongo en el codigo de ejemplo, pero algo debe estar mal, ya que al ejecutar el codigo me lanza el siguiente error: "HTTP/1.1 401 Unauthorized."
Parece ser que no me autentifico correctamente, pero el usuario y la clave son correctos, ya que si pongo la direccion del servicio en un navegador, me sale una ventana pidiendo usuario y clave, introduzco las mismas que pongo en el código y si accedo al web services.

Seguro que es un error sencillo, pero es la primera vez que utilizo las indy y que realizo conexiones web services. Alguién prodría orientame un poco.

Gracias y saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #2  
Antiguo 22-04-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Post

He seguido revisando el componente indy y he visto la opción "BasicAuthentication". Dicha opción en el ejemplo anterior, por defecto es False y por lo que la he cambiado, quedando el codigo ahora:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  http: TIdHttp;
  respuesta: string;
  datosPost: TIdMultiPartFormDataStream;
begin
  http:= TIdHTTP.Create(Self);
  http.Request.BasicAuthentication:=True;
  http.Request.Username:= 'urbano';
  http.Request.Password:= 'atm';
  datosPost := TIdMultiPartFormDataStream.Create;
  try
   datosPost.AddFormField('description', 'Atm1');
   datosPost.AddFormField('comments', 'firmar documento de prueba');
   datosPost.AddFormField('reference', '1');
   datosPost.AddFormField('file', 'C:\firmar1.pdf');

   respuesta := http.Post('http://api.portasigma.com/v1/docs/', datospost);
  finally
    http.Free;
    datospost.free;
  end;

  showmessage(respuesta);

end;
Ahora ya no me da el error de antes, tras ejecutar el codigo, ahora obtengo el error: "HTTP/1.1 401 Bad Request".
Alguna idea de este error?

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #3  
Antiguo 27-04-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Viendo que en seccion del foro no tengo muchos comentarios y según observo la mayoría de las consultas sobre Indy se han realizado en la sección de varios he trasladado este hilo a esa seccion.

Gracias a todos y si alguien quiere seguir el hilo, este se encuentra en la seccion de varios.

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #4  
Antiguo 27-04-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si esto es así es precisamente porque la gente no ubica bien los temas. Este foro es más adecuado que Varios por lo que cierro el otro hilo.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Amigo, URBANO, ¡¡¡tienes más de 120 mensajes y haces estas cosas!!!, por favor, recuerda nuestra guía de estilo, gracias.

Edito: Román, he acabado de unir ambos y me he encontrado con tu mensaje, voy a abrirlo de nuevo y a borrar los mensajes repetidos.
Responder Con Cita
  #6  
Antiguo 27-04-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
siente el lio. Ya lo habeis arreglado. Gracias.

Ya puesto, alguno de ustedes podría ayudarme. Conoceis algo de Indy.

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #7  
Antiguo 27-04-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Como un web service utiliza el protocolo HTTP, ciertamente puedes usar Indy para acceder al servico y mandar y recibir datos, pero es algo rudimentario. Delphi cuenta con herramientas especializadas para el manejo de los servicios web.

// Saludos
Responder Con Cita
  #8  
Antiguo 27-04-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
La verdad, nunca habia utilizado servicios web desde delphi. Como lo que tenia que hacer son post y get, leyendo por los foros, vi que muchos utilizaban TidHTTP de indy para ello, pero estoy abierto a cualquier sugerencia.
Podrías indicarme roman, que herramientas son esas que me comentas.

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #9  
Antiguo 28-04-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Nadie puede ayudarme?
Me urge, poder realizar este tipo de peticiones a una web desde delphi.

A nadie se le ha planteado el problema que comento?
__________________
El saber no ocupa lugar.
Responder Con Cita
  #10  
Antiguo 28-04-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Primero asegúrate de tener instalado el paquete "Borland SOAP Components". Después, en File|New|Others te vas a la pestaña "Web Services" y das doble clic sobre WSDL Importer. Te va a pedir la URL del servicio Web y sigues los pasos del asistente.

Esto te crea una unidad que declara las clases definidas en el web service y te da funciones para obtener instancias de estas clases.

En principio con esto debes poder acceder al servicio WEB.

De todas formas, el tema ha sido tratado anteriormente en los fros, así que haciendo una búsqueda puedes encontrar temas al respecto.

// Saludos
Responder Con Cita
  #11  
Antiguo 28-04-2011
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Cool TIdHTTP - Como me autentifico

Hola URBANO!!!

Creo que para acceder a un servicio web, me suena a que esta mas cerca lo que publico roman, que utilizando las TidHTTP...

No tengo experiencia en este tema para poder ayudarte...

Saluda Atte Neeruu!!!
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #12  
Antiguo 02-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Gracias Neeruu, por responder a mi correo.

Roman, gracias por tu respuesta, como me comentas he estado buscando en los foros y he estado leyendo otros post. Cuando me he dispuesto a realizar pruebas sobre lo leido, he comprobado que no tengo instalado el paquete "Borland SOAP Components". Trabajo en Delphi 5 y he revisado los cd de instalación y no trae este paquete. Con lo que me he quedado con las ganas de realizar las pruebas.
He estado buscando este paquete en internet pero no he dado con el. Alguien puede indicarme donde puedo conseguirlo.

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #13  
Antiguo 02-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Os indico más informacion sobre el portal que quiero integrar con mi aplicación desarrollada en delphi.

La API se define como una serie de servicios web “RESTful” en una arquitectura ROA (resource-oriented). Los servicios web de se basan en mecanismos estándar HTTP y respuestas en XHTML (que sepuede leer como XML bien formado). Este tipo de API se puede utilizar desde cualquier lenguaje de programación que pueda generar peticiones HTTP y decodificar XML.

Convenciones generales de implementación de la API:
• En general las peticiones que se describen requieren una previa autenticación de usuario. La autenticación se hará utilizando los mecanismos de autenticación de HTTP (p.e. autenticación básica).
• Las peticiones HTTP se comportan de forma uniforme con todos los recursos (GET: consulta, POST:
creación, PUT: modificación, DELETE: borrado).
• Los parámetros que se incluyen en peticiones POST son datos codificados como un formulario web estándar. Por defecto se utiliza la codificación application/x-www-form-urlencoded (excepto en los casos en que se deben subir archivos, en los que se usa multipart/form-data) y la codificación de caracteres UTF-8.
• Los parámetros para GET se codifican en formato URL estándar como url?
param1=valor1;param2=valor2... Éstos se utilizan como modificadores de la consulta (p.e. modo de presentación de los datos, paginación) y no para definir la ruta del recurso.

Espero que esta información sirva para orientarme mejor en como debe realizar la integración.

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #14  
Antiguo 04-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Sigo sin encontrar los componentes SOAP para delphi 5.

Podría alguien enviarme el paquete de instalación de este componente para delphi 5 o indicar algún sitio donde lo pueda conseguir?

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #15  
Antiguo 04-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿No lo tienes en tu equipo?, se debe llamar algo así como dclsoapxx.bpl
Responder Con Cita
  #16  
Antiguo 05-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
He estado buscando el fichero que me comentas en mi equipo y no he encontrado nada. Yo utilizo el delphi 5 y creo que inicialmente con esta versión no viene.

Algún enlace donde pueda descargarlo o si alguien lo tiene, me lo puede enviar.

Gracias.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #17  
Antiguo 06-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Estoy intentando instalar SOAP en delphi 5, pero de momento no lo he conseguido.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #18  
Antiguo 06-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Como aun no he podido instalar el SOAP en delphi 5 (Casimiro Notevi y yo no perdemos la esperanza ), he estado buscanco mas informacion sobre el componente de indy TidHTTP y he conseguido realizar "post" y "get" al Web Service que me quería conectar. Os pongo el codigo utilizado para cada uno:

Código:
procedure TForm1.Get(Sender: TObject);
begin
http.Request.Username:='user';
http.Request.Password:='pass';
showmessage(http.Get('http://apidelproveedor.com'));

//esto funciona y devuelve un fichero xml con la informacion que solicito.
end;
Código:
procedure TForm1.post-subiendofichero(Sender: TObject);
var
  datos: TIdMultiPartFormDataStream;
begin      
http.Request.Username:='user';
http.Request.Password:='pass';
datos:= TIdMultiPartFormDataStream.Create;
datos.AddFormField('description','prueba');
datos.AddFormField('comments','comentario sobre el documento');
datos.AddFormField('reference','3');
datos.AddFile('file','C:\firmar1.pdf','application/pdf');

showmessage(http.Post('http://apidelproveedor.com', datos));

datos.free;
end;
Código:
procedure TForm1.post-sinenviarfichero(Sender: TObject);
var
  aStream: TMemoryStream;
  Params: TStringStream;
begin         
http.Request.ContentType:='application/x-www-form-urlencoded';
http.Request.Username:='user';
http.Request.Password:='pass';

aStream := TMemoryStream.create;
Params := TStringStream.create('');

try
    Params.WriteString('name=' + 'pepe' + '&');
    Params.WriteString('email=' + 'pep@hotmail.com' + '&');
    Params.WriteString('id-country=' + 'ES' + '&');
    Params.WriteString('id-number=' + '44444444P');
    with HTTP do
    begin
      try
        HTTP.Post('http://apidelproveedor.com', Params,aStream);
      except
        on E: Exception do
          showmessage('Error encountered during POST: ' + E.Message);
      end;
    end;
    aStream.WriteBuffer(#0' ', 1);
    showmessage(PChar(aStream.Memory));
  except
  end;

params.free;
aStream.free;
end;
Pero ahora tengo otra duda. En la api del proveedor me indica que mediante el "post" creo un documento en mi cuenta (esto correcto como he indicado arriba) y para borrar un documento me indica que debo utilizar la operación "delete". Pero no encuentro ninguna acción "delete" en el componente TidHTTP. Tiene otro nombre? Como podría hacer esta operación?

Gracias por sus comentarios, me estan sirviendo de mucho.

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #19  
Antiguo 10-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Tras revisar mas información, he averiguado que el componente idTHHP posee la accion "DoRequest". He utilizado el siguiente código:

Código:
http.Request.Username:='User';
http.Request.password:='pass';

resultado:= TSTringStream.create('');

http.DoRequest(hmdelete,'direccion del recurso a eliminar',nil,resultado);
Pero al ejecutarlo me da el siguiente error:
"DOCTYPE HTML PUBLIC '-//IETF//DTD HTML 2.0//EN"

Alguien sabe que tipo de error es este?
Hay alguna otra forma de realizar un "delete" a un web service?

Saludos.
__________________
El saber no ocupa lugar.
Responder Con Cita
  #20  
Antiguo 11-05-2011
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Unhappy

No encuentro nada, de como poder realizar un "delete" utilizando Indy.

Nadie puede ayudarme???

Alguna idea???????????
__________________
El saber no ocupa lugar.
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
Socket Error # 10054 con TIdHTTP rolandoj Internet 10 19-01-2012 15:45:11
Ayuda urgente con Indy TIdHTTP Pugile C++ Builder 1 17-03-2011 12:21:04
TIDHTTP Con User y Pass Neeruu Varios 0 28-12-2009 13:36:49
Como pasar de TidHTTP con TWebModule a Web Service con XML ? rolandoj Internet 1 20-10-2008 17:45:48
TIdHTTP, dlls.... betto Internet 3 27-03-2007 21:49:03


La franja horaria es GMT +2. Ahora son las 01:01:43.


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