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.
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:

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