FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; 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. |
#2
|
|||
|
|||
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; Alguna idea de este error? Saludos.
__________________
El saber no ocupa lugar. |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
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 |
#5
|
||||
|
||||
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. |
#6
|
|||
|
|||
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. |
#7
|
||||
|
||||
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 |
#8
|
|||
|
|||
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. |
#9
|
|||
|
|||
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. |
#10
|
||||
|
||||
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 |
#11
|
|||
|
|||
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!!! :) |
#12
|
|||
|
|||
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. |
#13
|
|||
|
|||
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. |
#14
|
|||
|
|||
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. |
#15
|
||||
|
||||
¿No lo tienes en tu equipo?, se debe llamar algo así como dclsoapxx.bpl
|
#16
|
|||
|
|||
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. |
#17
|
|||
|
|||
Estoy intentando instalar SOAP en delphi 5, pero de momento no lo he conseguido.
__________________
El saber no ocupa lugar. |
#18
|
|||
|
|||
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; Gracias por sus comentarios, me estan sirviendo de mucho. Saludos.
__________________
El saber no ocupa lugar. |
#19
|
|||
|
|||
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); "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. |
#20
|
|||
|
|||
No encuentro nada, de como poder realizar un "delete" utilizando Indy.
Nadie puede ayudarme??? Alguna idea???????????
__________________
El saber no ocupa lugar. |
|
|
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 |
|