Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Luizccr
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 22 Jul 2013 12:23
Localização: Torres / RS

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Mensagem por Luizccr »

Quando chamo o método Read(), logo após um Open() da classe TIPClientHttp(), recebo uma string JSON vinda de uma página em PHP. Porém, notei que ocorre de vir, junto, três bytes de caracteres estranhos que precedem os dados desejados.
Quando chamo o mesmo método Read(), após um Post(), por exemplo, esse problema não ocorre.
Estou usando exemplos da HBTip que acompanham o Harbour 3.2, para tentar consumir uma API REST desenvolvida em PHP. A solução que encontrei para o problema foi suprimir esses três bytes iniciais, invocando a função substr(). Mas, gostaria de entender melhor a causa. Talvez, eu não esteja sabendo utilizar o método de forma correta.
Trecho de exemplo de meu código onde o problema acontece:

Código: Selecionar todos

    oHTTP := TIPClientHttp():new( oURL ) 
    oHTTP:setCookie(cSessaoAtiva)
    oHTTP:hFields := hAuthBearer
    if oHTTP:Open()
        cJSON := oHttp:read()
        cJSON := substr(cJSON,4) // Remove 3 bytes estranhos que aparecem 
                                // no início da string, quando lida logo
                                // depois do método Open().
        cSessaoAtiva := oHTTP:getcookies()
    else
        ? "Etapa #1 Error:", "oHTTP:Open()", oHTTP:lastErrorMessage()
    endif
Neste outro trecho, por exemplo, não tem problema algum:

Código: Selecionar todos

            oHTTP := TIPClientHttp():new( oURL )
            oHTTP:setCookie(cSessaoAtiva)        
            IF oHTTP:Open()
                IF oHTTP:Post( hb_jsonEncode( hLogin ) )
                    cJSON := oHttp:read()
                    ? oHTTP:getcookies()
                ELSE
                    ? "Etapa #2 Error:", "oHTTP:Post()", oHTTP:lastErrorMessage()
                ENDIF    
                oHTTP:Close()
            ELSE
                ? "Etapa #2 Error:", "oHTTP:Open()", oHTTP:lastErrorMessage()
            ENDIF
Anexos
Imagem de exemplo
Imagem de exemplo
Luiz Carlos Costa Rodrigues
IDE VSCode, pseudocompilador Harbour 3.2, compilador BCC 5.5 e S.O. Windows 10
Avatar do usuário
Luizccr
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 22 Jul 2013 12:23
Localização: Torres / RS

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Mensagem por Luizccr »

Acho que o problema está na API. Pois, alterei o URL do segundo código, no método Post(), deixando o mesmo que no primeiro código, e aconteceu o mesmo problema.
Luiz Carlos Costa Rodrigues
IDE VSCode, pseudocompilador Harbour 3.2, compilador BCC 5.5 e S.O. Windows 10
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Mensagem por sygecom »

Já tentou converter para UTF8

hb_UTF8ToStr()
hb_StrToUTF8()
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Mensagem por JoséQuintas »

José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Luizccr
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 22 Jul 2013 12:23
Localização: Torres / RS

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Mensagem por Luizccr »

Bingo! UTF BOM!
Bastou converter para UTF sem o BOM a única página PHP que estava com esse formato.
O problema não ocorria, no segundo trecho de código, porque a página para onde apontava estava salva no formato UTF sem o BOM.
Luiz Carlos Costa Rodrigues
IDE VSCode, pseudocompilador Harbour 3.2, compilador BCC 5.5 e S.O. Windows 10
Responder