Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   como conectar con web service (https://www.clubdelphi.com/foros/showthread.php?t=90460)

tec 14-06-2016 23:25:58

como conectar con web service
 
Hola,

desde delphi 6 quiero conectar con servidor web y pasarle petición de operación y esperar respuesta en JSON.

ES posible en D6 ?? con que herramientas ??

Muchas gracias por adelantado. :)

Neftali [Germán.Estévez] 15-06-2016 13:57:43

En esta serie de entradas se habla del tema, y en concreto en esta tienes implementado un cliente con Delphi 6 que acceder a un webservice y obtiene una respuesta JSON, la trata y la muestra. Todo ello usando las Indy.

Aquí tienes otro similar, en este caso accediendo a un servidor que requiere https.


tec 15-06-2016 21:54:10

Lo he visto y es lo que necesito felicidades por lo bien explicado que está.
Pero con el delphi 6 profesional da error al compilar no encuentra el componente TXMLTransformProvider.

¿ Puede ser que porque es el profesional y no lo trae ?. ¿ Se puede descargar en algún sitio ?

Saludos y muchas gracias.

PEIIB 21-05-2019 11:38:27

Hola buenas, hace unos días que estoy lidiando con el ejemplo de este hilo. De momento he conseguido leer los datos de una web api, mediante post y obtener el texto legible del Json, pero no consigo parsear los datos a un TclientDataset.
El código que tengo para ello, siguiendo el ejemplo de Neftalí és el siguiente:

Código Delphi [-]
procedure TForm2.ParseResponse(AObjResp: TlkJSONobject);
var
  objUserList:TlkJSONlist;
  objUser, objtmp:TlkJSONobject;
  i:integer;
  Str:String;
  cds:TClientDataSet;
begin
  // Limpiar el contenido
  cds := ClientDataSet1;
  cds.EmptyDataSet;
  showmessage(IntToStr(AObjResp.Count));     //Sí, hay 1032 datos

  // Objeto Check?
  if (AObjResp.IndexOfName('Check') <> -1) then begin       //Aquí da error    Access violation xxxx read of adress yyyy
    // Lo almaceamos en un tipo "lista"
    TlkJSONBase(objUserList) := AObjResp.Field['Check'];
    // Recorrer la lista de usuarios.
    for i := 0 to (objUserList.Count - 1) do begin
      // Objeto usuario
      TlkJSONBase(objUser) := objUserList.Child[i];
      TlkJSONBase(objtmp) := objUser.FieldByIndex[0];
      // Añadimos un registro al CDS
      cds.Append;
      try
        // Recoger los campos del objeto
        cds.FieldByName('id').AsString :=        VarToStr(objtmp.Field['id'].Value);
        cds.FieldByName('date').AsDateTime :=    VarToDateTime(objtmp.Field['date'].Value);
        cds.FieldByName('user_id').AsString :=   VarToStr(objtmp.Field['user_id'].Value);
        cds.FieldByName('admin_id').AsString :=  VarToStr(objtmp.Field['admin_id'].Value);
        cds.FieldByName('latitude').AsString :=  VarToStr(objtmp.Field['latitude'].Value);
        cds.FieldByName('longitude').AsString := VarToStr(objtmp.Field['longitude'].Value);
        cds.FieldByName('comment').AsString :=   VarToStr(objtmp.Field['comment'].Value);
        cds.FieldByName('type').AsString :=      VarToStr(objtmp.Field['type'].Value);
        cds.FieldByName('ip').AsString :=        VarToStr(objtmp.Field['ip'].Value);
        cds.FieldByName('from').AsString :=      VarToStr(objtmp.Field['from'].Value);
        cds.FieldByName('changed').AsString :=   VarToStr(objtmp.Field['changed'].Value);
        // Grabar
        cds.Post;
      finally
        cds.Cancel;
      end;
    end;
  end;

end;

Y el Json viene cargado con datos de este tipo:
Código:

[
  {
    "Check":{
      "id":"5cbe8e5b-9f0c-4c02-bc1b-4629bca5fb54",
      "date":"2019-04-23 04:02:35",
      "created":"2019-04-23 06:02:35",
      "modified":"2019-04-23 06:02:35",
      "user_id":"56657074-4e7c-4fe6-82b8-3b54bca5fb54",
      "admin_id":null,
      "latitude":"41.8696479797",
      "longitude":"2.4183871746",
      "comment":null,
      "type":"1",
      "ip":"31.4.188.115",
      "from":null,
      "changed":"0"
    }
  },
  {
    "Check":{
      "id":"5cbebab1-81bc-43c5-b244-5e4abca5fb54",
      "date":"2019-04-23 06:40:00",
      "created":"2019-04-23 09:11:45",
      "modified":"2019-04-23 10:12:18",
      "user_id":"56657074-4e7c-4fe6-82b8-3b54bca5fb54",
      "admin_id":"566e5a86-3aec-48a7-90d9-15b6bca5fb54",
      "latitude":null,
      "longitude":null,
      "comment":null,
      "type":"1",
      "ip":null,
      "from":null,
      "changed":"0"
    }
  },
  {
    "Check":{
      "id":"5cbeba9a-63f8-47d7-9903-5e4abca5fb54",
      "date":"2019-04-23 07:11:22",
      "created":"2019-04-23 09:11:22",
...
...

la línea:
if (AObjResp.IndexOfName('Check') <> -1) then begin
provoca un error Access violation xxxx read of adress yyyy

Podeis echarme una mano? Cualquier cosa que intento me da error y no se como continuar.

Gracias de antemano


La franja horaria es GMT +2. Ahora son las 06:58:17.

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