Página 1 de 1
gzip para webservice
Enviado: 03 Nov 2023 12:35
por JoséQuintas
Surgiu a necessidade de transferir a mensagem em formato GZIP para o webservice.
Imagino que seja diferente da usada pra zipar um arquivo, porque nesta inclui nome de arquivo, tamanho, etc.
Alguém tem idéia de como fazer isso?
webservice comunicação síncrona
Enviado: 05 Nov 2023 14:35
por JoséQuintas
Alguém sabe algo sobre comunicação síncrona ?
Ou poderiam perguntar nos grupos, talvez fivewin/minigui.
Nos testes aqui não retorna nada, nem erro, nem nada.
Na internet menciona o Open() com false, isso sempre usei.
Também menciona que o :WaitForResponse() só vale pra assíncrono.
Mas não encontrei mais detalhes.
NFE e MDFE tem isso faz termpo, mas é opcional.
No CTE vai ser obrigatório.
À primeira vista seria esperar pela resposta, mas tudo indica que não espera.
Já fiz testes trocando POST por GET, colocando testes de conteúdo, etc, mas nenhum funcionou.
Parece que informações pra uso estilo Harbour/VB6 estão sumindo da internet.
webservice comunicação síncrona
Enviado: 06 Nov 2023 12:00
por JoséQuintas
Pelo que estou vendo no manual, eu já faço comunicação síncrona sem problemas.
Então a coisa complicou.
Pode ser que o zip do harbour não seja compatível, não sei dizer.
webservice comunicação síncrona
Enviado: 06 Nov 2023 13:43
por Itamar M. Lins Jr.
Olá!
Teste aqui:
https://bugdays.com/gzip-base64
Saudações,
Itamar M. Lins Jr.
webservice comunicação síncrona
Enviado: 06 Nov 2023 15:21
por JoséQuintas
webservice comunicação síncrona
Enviado: 06 Nov 2023 15:38
por Itamar M. Lins Jr.
Olá!
É gzip!
Saudações,
Itamar M. Lins Jr.
webservice comunicação síncrona
Enviado: 06 Nov 2023 16:04
por JoséQuintas
Resolvido, passaram no harbour-users.
HB_GZCOMPRESS()
O XML.... tá na gambiarra de oficial/homologação, então pode estar errado mesmo.
Esse MDFE já está em funcionamento, o teste é só do envio em modo síncrono.
gzip para webservice
Enviado: 07 Nov 2023 13:53
por Wanderlei
Oi Zé, eu utilizo a zlib.lib para descompactar o arquivo de Distribuição de NFe, mais não sei como compacta.
Baixamos uma função em C++ para fazer isso
https://www.zlib.net/manual.html#Gzip Manual da zlib
Código: Selecionar todos
#pragma BEGINDUMP // Abre sessÆo C dentro do fonte PRG
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "errno.h"
#include "zlib.h"
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbapierr.h"
#define windowBits 15
#define ENABLE_ZLIB_GZIP 32
#define CHUNK 0x4000
char caminhogz[150];
char caminhotxt[150];
HB_FUNC( HB_FUNC_ABRIRGZ )
{
if(!caminhogz[1]){ // Verifica se a posição 1 do vetor já está carregada. (Ao chamar pela segunda vez, o vetor já estava carregado)
strcat(caminhogz, hb_parc(1));
strcat(caminhogz, "tempX.gz");
strcat(caminhotxt, hb_parc(1));
strcat(caminhotxt, "tempX.txt");
}
hb_retni(FUNC_ABRIRGZ());
}
int FUNC_ABRIRGZ()
{
const char * file_name_gz = caminhogz;
const char * file_name_txt = caminhotxt;
FILE * fileo;
FILE * fileo2;
z_stream strm = {0};
unsigned char in[CHUNK];
unsigned char out[CHUNK];
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.next_in = in;
strm.avail_in = 0;
if (inflateInit2 (& strm, windowBits | ENABLE_ZLIB_GZIP) < 0)
return -1;
fileo = fopen (file_name_gz, "rb");
if ( fileo <= 0)
return -2;
fileo2 = fopen (file_name_txt, "wb");
if ( fileo2 <= 0)
return -3;
while (1) {
int bytes_read;
int zlib_status;
bytes_read = fread (in, sizeof (char), sizeof (in), fileo);
if (ferror(fileo))
return -4;
strm.avail_in = bytes_read;
strm.next_in = in;
do {
unsigned have;
strm.avail_out = CHUNK;
strm.next_out = out;
zlib_status = inflate (& strm, Z_NO_FLUSH);
switch (zlib_status) {
case Z_OK:
case Z_STREAM_END:
case Z_BUF_ERROR:
break;
default:
inflateEnd (& strm);
fprintf (stderr, "Gzip error %d in '%s'.\n",
zlib_status, file_name_gz);
return -5;
}
have = CHUNK - strm.avail_out;
fwrite (out, sizeof (unsigned char), have, fileo2);
}
while (strm.avail_out == 0);
if (feof (fileo)) {
inflateEnd (& strm);
break;
}
}
if(fclose(fileo))
return -6;
if (fclose(fileo2))
return -7;
return 0;
}
gzip para webservice
Enviado: 07 Nov 2023 17:05
por JoséQuintas
Valeu, mas isso foi resolvido.
hb_gzCompress()
Mas quem usa xharbour pode precisar.
webservice comunicação síncrona
Enviado: 10 Nov 2023 12:23
por Kapiaba
Código: Selecionar todos
Pasta de D:\XHBBCC74\tests
23/04/2019 16:49 963 7zip.prg
23/04/2019 16:49 1.210 7zip1.prg
23/04/2019 16:49 2.495 7zip2.prg
23/04/2019 16:49 1.790 7zip3.prg
abs.
webservice comunicação síncrona
Enviado: 10 Nov 2023 13:28
por JoséQuintas
Atenção:
NÃO É compactar arquivo, é compactar texto.
E tem que ser formato gzip, não serve zip.
webservice comunicação síncrona
Enviado: 13 Nov 2023 18:11
por alaminojunior
JoséQuintas escreveu:Valeu, mas isso foi resolvido.
hb_gzCompress()
Mas quem usa xharbour pode precisar.
No meu caso, num sistema ainda em xHarbour criei um executável noutra ferramenta que faz a compactação, pois não encontrei função no xHarbour.
webservice comunicação síncrona
Enviado: 14 Nov 2023 07:49
por JoséQuintas
Só pra atualizar:
O título do tópico foi sobre webservice com comunicação síncrona.
Na prática, a sefazclass faz isso desde o início, trata-se apenas daquele Open() com False.
Sempre usei, e nem sabia que isso tinha a ver.
O envio de GZIP não tem a ver com comunicação síncrona.
Pra alguns webservices da fazenda, isso é opcional há algum tempo.
Para o CTE 4.00 começa a obrigatoriedade: só existe opção GZIP.
Como nos testes não retornava nada, achei que tinha algo a ver com a comunicação sincrona.
alaminojunior escreveu:No meu caso, num sistema ainda em xHarbour criei um executável noutra ferramenta que faz a compactação, pois não encontrei função no xHarbour.
Foi o primeiro teste que fiz: usei hb_compress() da biblioteca de compatibilidade com xharbour, achando que poderia ser compatível.
Mas saiba que a do Harbour funciona, essa "outra ferramenta" que menciona, pode ser o harbour mesmo.