Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-05-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
eso estoy intentando hacer
pero si te das cuenta
primero debo obtener un token de esta direccion

https://zona-api.aris.com.pe/v1/user/signin

una vez obtenido ese token (no encuentro forma de replicar eso en restdebugger)

necesito subir el archivo...
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 16-05-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
asi esta configurado en postman.. y funciona

ya estoy a punto de tirar la toalla


__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 16-05-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
asi esta configurado en postman.. y funciona

ya estoy a punto de tirar la toalla


https://i.postimg.cc/bvWJV9T1/postman.png
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 17-05-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por oscarac Ver Mensaje
una vez obtenido ese token (no encuentro forma de replicar eso en restdebugger)
necesito subir el archivo...

Dentro de los parámetros del RESTDebugger puedes definir uno como BODY. Prueba con ese.





De todas formas, si ves que con es RESTDebugger no lo consigues no pasa nada, ves directamente a los componentes.

¿Al intentar añadir el fichero tal y como hemos comentado antes (usando Stream) qué error te da?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 17-05-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
buenos dias
tengo una respuesta del servidoer indicando que el archivo esta vacio
esa respuesta me da, cuando no envio el archivo, porque si lo recibe la respuesta seria otra

mi restdebugger no esta funcionando, aparece un mensaje de error

ahora.. en postman en el body, el parametro llamado "archivo" es de tipo file... hay tipo texto tambien, pero con ese no funciona, debe ser tipo file...... creo que por ahi va la cosa...

esto es lo que tengo

Código Delphi [-]
unit frmMain_f;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  IPPeerClient, Vcl.StdCtrls, REST.Client, Data.Bind.Components,
  Data.Bind.ObjectScope, system.JSON, REST.Authenticator.OAuth, REST.Types;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    RCCredenciales: TRESTClient;
    RQCredenciales: TRESTRequest;
    RRCredenciales: TRESTResponse;
    Label2: TLabel;
    Memo2: TMemo;
    RRFile: TRESTResponse;
    RQFile: TRESTRequest;
    RCFile: TRESTClient;
    oAUTHRQ: TOAuth2Authenticator;
    procedure Button1Click(Sender: TObject);
  private
    function MemoryStreamToString(M: TMemoryStream): string;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  jValue: TJSONValue;  // Respuesta del Request
  JSonValue: TJSonValue;
  Branch: string;
  _file: TMemoryStream;
  localfile: string;
  param: TRESTRequestParameter;
begin
  localfile := 'd:\desarrollo\concesiones\servicial\aris\envios\LURIN-09052023.txt';

  try
    // CLiente
    RCCredenciales.ResetToDefaults;
    RCCredenciales.BaseURL := 'https://zona-api.aris.com.pe/v1/user/signin';
    RCCredenciales.Accept := 'application/json, text/plain; q=0.9, text/html;q=0.8,';
    RCCredenciales.AddParameter('user', 'user');
    RCCredenciales.AddParameter('password', '******************');

    // Request
    RQCredenciales.Method := TRESTRequestMethod.rmPOST;
    RQCredenciales.Execute;

    // Ya se conectó a la web

    jValue := RRCredenciales.JSONValue;
    Branch := jValue.ToString;
    JSonValue := TJSonObject.ParseJSONValue(Branch);

    // Chapo El Token y lo coloco en el Auth2
    oAUTHRQ.AccessToken := JSonValue.GetValue<string>('data.data.tk');
    oAUTHRQ.TokenType := TOAuth2TokenType.ttBEARER;
    Memo1.Text := Branch;

    RCFile.ResetToDefaults;
    RCFile.Params.Clear;
    RCFile.BaseURL := 'https://zona-api.aris.com.pe/v1/concesionario/masivo';
    RCFile.Accept := 'text/plain';
    RCFile.Authenticator := oAUTHRQ;

    //RQFile.ClearBody;
    RQFile.Method := TRESTRequestMethod.rmPOST;

    _file := TMemoryStream.Create();
    _file.LoadFromFile(localfile);
    _file.Position := 0;


    param := RQFile.Params.AddItem;
    RQFile.Params[0].name := 'archivo';
    RQFile.Params[0].value := MemoryStreamToString(_file);
    RQFile.Params[0].kind := pkGETorPOST;
    RQFile.Params[0].ContentType := ctTEXT_PLAIN;
    RQFile.Params[0].Options := [poDoNotEncode];

    RQFile.Execute;
    jValue := RRFile.JSONValue;
    Memo2.Text := jValue.ToString;

  finally

  end;
end;

function TForm1.MemoryStreamToString(M: TMemoryStream): string;
begin
  SetString(Result, PChar(M.Memory), M.Size div SizeOf(Char));
end;

end.
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 17-05-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Tal vez me he perdido algo, pero sigo echando en falta que pruebes a cargar el fichero en el Body.
Con este código:

Código Delphi [-]
    
//RQFile.ClearBody;     
RQFile.Method := TRESTRequestMethod.rmPOST;      
_file := TMemoryStream.Create();     
_file.LoadFromFile(localfile);     
_file.Position := 0;       
param := RQFile.Params.AddItem;     
RQFile.Params[0].name := 'archivo';     
RQFile.Params[0].value := MemoryStreamToString(_file);

Creo que lo estás intentando cargar como parámetro.
Intenta cargarlo en el Body con esto:

Código Delphi [-]
var
  Contenido: TStringStream;
begin
  ...
  //RQFile.ClearBody;  
  RQFile.Method := TRESTRequestMethod.rmPOST;
  // Creamos el stream
  Contenido := TStringStream.Create;
  try
    // Cargamos el cntenido del fichero en el TStream
    Contenido.LoadFromFile('Fichero.xml');   // aquí tu fichero   
    // Añadirlo al Body
    RQFile.Body.Add(Contenido, TRESTContentType.ctTEXT_PLAIN);  
    //  => Prueba a cambiar el segundo porámetro por diferentes tipos según lo que estás enviando

    // ejecutar la peticion
    RQFile.Execute;
    jValue := RRFile.JSONValue;     
    Memo2.Text := jValue.ToString  
  finally
    contenido.Free;
...
  end;

Está claro que si en el PostMan te está funcionando en el Body, aquí debes usar la propiedad Body para enviarlo.
https://docwiki.embarcadero.com/Libr...STRequest.Body
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 17-05-2023 a las 17:50:24.
Responder Con Cita
  #7  
Antiguo 17-05-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Tal vez me he perdido algo, pero sigo echando en falta que pruebes a cargar el fichero en el Body.
Con este código:

Código Delphi [-]
    
//RQFile.ClearBody;     
RQFile.Method := TRESTRequestMethod.rmPOST;      
_file := TMemoryStream.Create();     
_file.LoadFromFile(localfile);     
_file.Position := 0;       
param := RQFile.Params.AddItem;     
RQFile.Params[0].name := 'archivo';     
RQFile.Params[0].value := MemoryStreamToString(_file);

Creo que lo estás intentando cargar como parámetro.
Intenta cargarlo en el Body con esto:

Código Delphi [-]
var
  Contenido: TStringStream;
begin
  ...
  //RQFile.ClearBody;  
  RQFile.Method := TRESTRequestMethod.rmPOST;
  // Creamos el stream
  Contenido := TStringStream.Create;
  try
    // Cargamos el cntenido del fichero en el TStream
    Contenido.LoadFromFile('Fichero.xml');   // aquí tu fichero   
    // Añadirlo al Body
    RQFile.Body.Add(Contenido, TRESTContentType.ctTEXT_PLAIN);  
    //  => Prueba a cambiar el segundo porámetro por diferentes tipos según lo que estás enviando

    // ejecutar la peticion
    RQFile.Execute;
    jValue := RRFile.JSONValue;     
    Memo2.Text := jValue.ToString  
  finally
    contenido.Free;
...
  end;

Está claro que si en el PostMan te está funcionando en el Body, aquí debes usar la propiedad Body para enviarlo.
https://docwiki.embarcadero.com/Libr...STRequest.Body
E la version Xe7 no tengo el body.add
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 17-05-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
al final cambié a Indy.... y funcionó

les dejo el codigo por si alguien lo necesita

Código Delphi [-]
unit frmMain_f;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  IdMultipartFormData, IdSSLOpenSSL, IdSSLOpenSSLHeaders, Vcl.StdCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, system.json;

type
  TForm1 = class(TForm)
    IndCredenciales: TIdHTTP;
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    IndCredencialesSSL: TIdSSLIOHandlerSocketOpenSSL;
    Memo2: TMemo;
    IndFile: TIdHTTP;
    IndFileSSL: TIdSSLIOHandlerSocketOpenSSL;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  //lHTTP: TIdHTTP;
  datosPost: TIdMultiPartFormDataStream;
  URL: string;
  response, tk, localfile: string;
  respuesta: TJSONValue;
  RequestBody: TStream;

begin
 localfile := 'd:\desarrollo\concesiones\servicial\aris\envios\LURIN-09052023.txt';
  try

    //Conexion Endpoint Primario
    URL := 'https://zona-api.aris.com.pe/v1/user/signin';


    datosPost := TIdMultiPartFormDataStream.Create;
    datosPost.AddFormField('user', 'user');
    datosPost.AddFormField('password', '***********');
    response := IndCredenciales.Post(URL, datosPost);
    Memo1.Text := response;
    respuesta := TJSonObject.ParseJSONValue(response);
    tk := respuesta.GetValue<string>('data.data.tk');
    Label1.Caption := tk;
    datosPost.Free;
    // Ya estoy conectado

    // Conexion EndPoint Archivo
    // enviar archivo
    URL := 'https://zona-api.aris.com.pe/v1/concesionario/masivo';
    IndFile.Request.CustomHeaders.FoldLines := False;
    indFile.Request.CustomHeaders.Add('Authorization:Bearer ' + tk);
    datosPost := TIdMultiPartFormDataStream.Create;
    datosPost.AddFile('archivo', localfile, 'multipart/form-data');
    Response := IndFile.Post(URL, datosPost);
    Memo2.Text := response;
    datosPost.Free;

  finally
  end;
end;


end.
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #9  
Antiguo 18-05-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por oscarac Ver Mensaje
E la version Xe7 no tengo el body.add

Raro que no tenga nada similar para enviar algo en el cuerpo de la petición.

Cita:
Empezado por oscarac Ver Mensaje
al final cambié a Indy.... y funcionó
les dejo el codigo por si alguien lo necesita

Gracias.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 16-12-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
al final cambié a Indy.... y funcionó

les dejo el codigo por si alguien lo necesita

Código Delphi [-]
unit frmMain_f;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  IdMultipartFormData, IdSSLOpenSSL, IdSSLOpenSSLHeaders, Vcl.StdCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, system.json;

type
  TForm1 = class(TForm)
    IndCredenciales: TIdHTTP;
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    IndCredencialesSSL: TIdSSLIOHandlerSocketOpenSSL;
    Memo2: TMemo;
    IndFile: TIdHTTP;
    IndFileSSL: TIdSSLIOHandlerSocketOpenSSL;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  //lHTTP: TIdHTTP;
  datosPost: TIdMultiPartFormDataStream;
  URL: string;
  response, tk, localfile: string;
  respuesta: TJSONValue;
  RequestBody: TStream;

begin
 localfile := 'd:\desarrollo\concesiones\servicial\aris\envios\LURIN-09052023.txt';
  try

    //Conexion Endpoint Primario
    URL := 'https://zona-api.aris.com.pe/v1/user/signin';


    datosPost := TIdMultiPartFormDataStream.Create;
    datosPost.AddFormField('user', 'user');
    datosPost.AddFormField('password', '***********');
    response := IndCredenciales.Post(URL, datosPost);
    Memo1.Text := response;
    respuesta := TJSonObject.ParseJSONValue(response);
    tk := respuesta.GetValue<string>('data.data.tk');
    Label1.Caption := tk;
    datosPost.Free;
    // Ya estoy conectado

    // Conexion EndPoint Archivo
    // enviar archivo
    URL := 'https://zona-api.aris.com.pe/v1/concesionario/masivo';
    IndFile.Request.CustomHeaders.FoldLines := False;
    indFile.Request.CustomHeaders.Add('Authorization:Bearer ' + tk);
    datosPost := TIdMultiPartFormDataStream.Create;
    datosPost.AddFile('archivo', localfile, 'multipart/form-data');
    Response := IndFile.Post(URL, datosPost);
    Memo2.Text := response;
    datosPost.Free;

  finally
  end;
end;


end.
buenas noches....este tema lo hice porque un cliente queria que se suba informacion a su repositorio en la web y me dá curiosidad saber como es que lo hace... (no hablo del subir la información porque eso ya se solucionó), es decir... como prepara su hosting en la dirección https://zona-api.aris.com.pe/v1/concesionario/masivo para procesar la informacion que recibe...

alguien me entendió?
__________________
Dulce Regalo que Satanas manda para mi.....
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
Post Con Demora jerry_mdq Tablas planas 35 05-05-2011 19:53:56
POST sin boton ZayDun HTML, Javascript y otros 1 19-04-2008 11:33:46
IBDatase Insert Post Edit Post ariefez Firebird e Interbase 4 12-10-2005 01:53:04
After Post en interbase jgutti Firebird e Interbase 2 09-03-2005 06:00:12
cancelar post?? ebeltete SQL 9 17-06-2004 22:46:19


La franja horaria es GMT +2. Ahora son las 10:10:02.


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