Página 1 de 1

Método:responseBody está com bug no harbour

Enviado: 10 Out 2011 10:09
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

Método:responseBody está com bug no harbour

Enviado: 10 Out 2011 12:01
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.

Método:responseBody está com bug no harbour

Enviado: 10 Out 2011 12:24
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.

Método:responseBody está com bug no harbour

Enviado: 10 Out 2011 12:50
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.

Método:responseBody está com bug no harbour

Enviado: 10 Out 2011 13:47
por asimoes
Itamar,

Interessante isso, em xharbour oPg:responseBody o retorno é texto.
Com harbour o seu post retorna isso:
Imagem

Método:responseBody está com bug no harbour

Enviado: 10 Out 2011 14:21
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.

Método:responseBody está com bug no harbour

Enviado: 10 Out 2011 15:19
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>

Método:responseBody está com bug no harbour

Enviado: 14 Out 2011 17:24
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.

Método:responseBody está com bug no harbour

Enviado: 14 Out 2011 17:46
por asimoes
VAleu Itamar,

Funcionou perfeitamente!

[]´s