Método:responseBody está com bug no harbour

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método:responseBody está com bug no harbour

Mensagem por asimoes »

Senhores,

Este código compilado com o xharbour que o sygcom disponibilizou em https://pctoledo.org/forum/fileba ... t=c&page=1
o método responsebody retorna como texto, corretamente inclusive com acentução. No harbour está retornando como vetor de números.

Código: Selecionar todos

cCEP="05171340" 
oPg := CreateObject("Microsoft.XMLHTTP")
oPg:Open("GET","http://cep.republicavirtual.com.br/web_cep.php?cep=" + cCep + "&formato=xml",.F.)
oPg:Send()
cBuf := oPg:responseBody //ResponseText
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Método:responseBody está com bug no harbour

Mensagem por Itamar M. Lins Jr. »

Interessante, o retorno pelo Harbour, para converter use a função chr().

Código: Selecionar todos

cCEP := "05171340" 
oPg := CreateObject("Microsoft.XMLHTTP")
oPg:Open("GET","http://cep.republicavirtual.com.br/web_cep.php?cep=" + cCep + "&formato=xml",.F.)
oPg:Send()
cBuf := oPg:responseBody //ResponseText
cText := ""

For n = 1 to len(cBuf)
 ctext += chr(cBuf[n])
Next

alert(HB_VALTOEXP(cBuf)+"----"+cText)
Não sei se eles interpretarão isso como um Bug, de qualquer forma eu postei no grupo de desenvolvedores.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Método:responseBody está com bug no harbour

Mensagem por Itamar M. Lins Jr. »

Bem, já responderam.
So, Harbour returns a correct result, because "responseBody Retrieves the response body as an array of unsigned bytes". See
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Segundo eles o retorno pelo Harbour está correto, seguindo o padrão da MS.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Método:responseBody está com bug no harbour

Mensagem por Itamar M. Lins Jr. »

E ele ainda corrigiu, o código que postei.
This is not Clipper compatible code. It should be
ctext += chr(substr(cBuf, n, 1))
Então:

Código: Selecionar todos

cCEP := "05171340" 
oPg := CreateObject("Microsoft.XMLHTTP")
oPg:Open("GET","http://cep.republicavirtual.com.br/web_cep.php?cep=" + cCep + "&formato=xml",.F.)
oPg:Send()
cBuf := oPg:responseBody //ResponseText
cText := ""

For n = 1 to len(cBuf)
 ctext += chr(substr(cBuf, n, 1))
Next

alert(cText)
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método:responseBody está com bug no harbour

Mensagem por asimoes »

Itamar,

Interessante isso, em xharbour oPg:responseBody o retorno é texto.
Com harbour o seu post retorna isso:
Imagem
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Método:responseBody está com bug no harbour

Mensagem por Itamar M. Lins Jr. »

Então, conforme o texto da MS, está correto. O retorno é uma array mesmo.
É so converter com chr().

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método:responseBody está com bug no harbour

Mensagem por asimoes »

Isso mesmo Itamar,

fiz o teste aqui convertendo com chr() o conteúdo do vetor e produziu o xml.

O xharbour deve fazer essa conversão automáticamente.

O método ResponseText traz errado os caracteres acentuados. Observem a última tag <logradouro>

Com responseBody:

Código: Selecionar todos

<?xml version="1.0" encoding="iso-8859-1" ?>
<webservicecep>
<resultado>1</resultado>
<resultado_txt>sucesso - cep completo</resultado_txt>
<uf>SP</uf>
<cidade>São Paulo</cidade>
<bairro>Jardim Santa Mônica</bairro>
<tipo_logradouro>Rua</tipo_logradouro>
<logradouro>Doutor Mário Mauro Ramos Mattoso</logradouro>
</webservicecep>
Com ResponseText

Código: Selecionar todos

<?xml version="1.0" encoding="iso-8859-1" ?>
<webservicecep>
<resultado>1</resultado>
<resultado_txt>sucesso - cep completo</resultado_txt>
<uf>SP</uf>
<cidade>S?Paulo</cidade>
<bairro>Jardim Santa M?a</bairro>
<tipo_logradouro>Rua</tipo_logradouro>
<logradouro>Doutor M?o Mauro Ramos Mattoso</logradouro>
</webservicecep>
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Método:responseBody está com bug no harbour

Mensagem por Itamar M. Lins Jr. »

Trabalhe desta forma que vém os acentos:

Código: Selecionar todos

oPg := Win_OleCreateObject("Microsoft.XMLHTTP")
oPg : Open("GET","http://cep.republicavirtual.com.br/web_cep.php?cep=" + cCep + "&formato=xml",.F.)
oPg : Send()

DOMXML := oPg:responseXML //Resposta Document Object Model XML//responseBody //ResponseText
lResp := iif(DOMXML:getElementsByTagName( "resultado" ):item(0):Text="1",.t.,.f.)

cUF :=""
cCID:=""
cBAI:=""
cLOG:=""
cRUA:=""

IF lResp
   cUF  := DOMXML : getElementsByTagName( "uf" )              : item(0) : Text
   cCID := DOMXML : getElementsByTagName( "cidade" )          : item(0) : Text
   cBAI := DOMXML : getElementsByTagName( "bairro" )          : item(0) : Text
   cLOG := DOMXML : getElementsByTagName( "tipo_logradouro" ) : item(0) : Text
   cRUA := DOMXML : getElementsByTagName( "logradouro" )      : item(0) : Text
EndIf
Mais profissional e muito mais enxuto o código.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método:responseBody está com bug no harbour

Mensagem por asimoes »

VAleu Itamar,

Funcionou perfeitamente!

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder