¿Cómo obtener datos HTTP continuos?
Estoy intentando obtener datos de trading en vivo desde Internet a través de HTTP, pero se actualiza continuamente, así que si hago una petición GET
, seguirá descargando mientras haya datos disponibles. Hasta que detenga la transmisión de descarga, entonces podré acceder a los datos.
¿Cómo acceder al flujo de datos mientras la descarga está en progreso?
Intenté usar TIdHTTP
de Indy, para poder usar SSL, pero intenté con IdIOHandlerStream
, pero ya se estaba usando para IdSSLIOHandlerSocketOpenSSL
. Así que estoy completamente confundido aquí.
Esto es en respuesta a una solicitud "multipart/form-data"
.
Por favor guíame…
Lrequest.Values['__RequestVerificationToken'] := RequestVerificationToken;
Lrequest.Values['acct'] := 'demo';
Lrequest.Values['pwd'] := 'demo';
try
Response.Text := Onhttp.Post('https://trading/data', Lrequest);
Form1.Memo1.Lines.Add(TimeToStr(Time) + ': ' + Response.Text);
except
on E: Exception do
Form1.Memo1.Lines.Add(TimeToStr(Time) + ': ' + E.ClassName +
' ha generado un error, con el mensaje: ' + E.Message);
end;
ACTUALIZACIÓN:
Los datos son una cadena JSON infinita, así:
json
{"id":"datos","val":[{"rc":2,"tpc":"\RealTime\Global\SGDIDR.FX","item":[{"val":{"F009":"10454.90","F011":"-33.1"}}]}]}
{"id":"datos","val":[{"rc":2,"tpc":"\RealTime\Global\SGDIDR.FX","item":[{"val":{"F009":"10458.80","F011":"-29.2"}}]}]}
y así sucesivamente…
davy.ai
Para acceder al flujo de datos mientras la descarga está en progreso, se puede utilizar el evento
OnWork
del componenteTIdHTTP
de Indy. Este evento se activa periódicamente durante el proceso de transferencia de datos y permite hacer un seguimiento del progreso de la descarga y acceder a los datos descargados conforme se van recibiendo.Aquí hay un ejemplo de cómo se puede utilizar el evento
OnWork
para analizar los datos JSON entrantes en tiempo real:En este ejemplo, creamos una instancia de
TIdHTTP
y establecemos su eventoOnWork
enHTTPWork
. En el métodoButton1Click
, creamos unTIdMultiPartFormDataStream
para enviar los parámetros de solicitud necesarios y unTStringStream
para recibir los datos de respuesta.En el evento
HTTPWork
, comprobamos que el parámetroAWorkMode
está configurado enwmRead
, lo que significa que estamos leyendo los datos del servidor. A continuación, analizamos los datos JSON entrantes en tiempo real llamando repetidamente aTJSONObject.ParseJSONValue
con los datos de cadena restantes hasta que los hayamos procesado todos.Por último, procesamos los datos JSON analizados en el método
ProcessJSONData
según sea necesario. En este ejemplo, solo nos interesa los datos JSON con un campoid
de"data"
, que contiene una matriz de valores de datos que extraemos y procesamos.