Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.
Moderador: Moderadores
asimoes
Colaborador
Mensagens: 4919 Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ
Mensagem
por asimoes » 10 Out 2011 10:09
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)
Itamar M. Lins Jr.
Administrador
Mensagens: 7929 Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez
Mensagem
por Itamar M. Lins Jr. » 10 Out 2011 12:01
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.
Itamar M. Lins Jr.
Administrador
Mensagens: 7929 Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez
Mensagem
por Itamar M. Lins Jr. » 10 Out 2011 12:24
Bem, já responderam.
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.
Itamar M. Lins Jr.
Administrador
Mensagens: 7929 Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez
Mensagem
por Itamar M. Lins Jr. » 10 Out 2011 12:50
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.
asimoes
Colaborador
Mensagens: 4919 Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ
Mensagem
por asimoes » 10 Out 2011 13:47
Itamar,
Interessante isso, em xharbour oPg:responseBody o retorno é texto.
Com harbour o seu post retorna isso:
►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)
Itamar M. Lins Jr.
Administrador
Mensagens: 7929 Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez
Mensagem
por Itamar M. Lins Jr. » 10 Out 2011 14:21
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.
asimoes
Colaborador
Mensagens: 4919 Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ
Mensagem
por asimoes » 10 Out 2011 15:19
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)
Itamar M. Lins Jr.
Administrador
Mensagens: 7929 Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez
Mensagem
por Itamar M. Lins Jr. » 14 Out 2011 17:24
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.
asimoes
Colaborador
Mensagens: 4919 Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ
Mensagem
por asimoes » 14 Out 2011 17:46
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)