Veja o que causa o HttpVersionNotSupported ao consumir uma API via AdvPL

Você já se deparou com o erro HttpVersionNotSupported via AdvPL? Sabe o que causa? Então vamos ver no artigo de hoje.

O que acontece pessoal, é que algumas APIs podem ter o “espaço vazio” na URL da requisição, então vamos pegar a seguinte URL como exemplo:

https://empresa.com/api/consulta funcionarios?matricula=000001

 

Vocês notaram que tem um espaço ali entre as palavras “consulta” e “funcionarios”? O que acontece se tentarmos consumir via AdvPL essa API?

Se nós não tratarmos esse espaço, ele vai ocasionar o erro 505 com a mensagem HttpVersionNotSupported. Então qual seria a melhor forma de resolver essa questão?

Ao invés do caractere “espaço vazio”, nós temos que usar o código “%20” que faz essa tratativa por trás nas plataformas WEB, então a URL teria que ficar dessa forma:

https://empresa.com/api/consulta%20funcionarios?matricula=000001

 

Mas e via AdvPL, como podemos tratar isso? Basta usarmos a função Escape para tratar esses tipos de caracteres. Então considerando a URL acima, nosso exemplo ficaria assim:

//Adiciona os cabeçalhos da requisição
aHeadOut := {}
aAdd(aHeadOut, "User-Agent: Mozilla/4.0 (compatible; Protheus " + GetBuild() + ")")

//Monta a URL de requisição
cURL    := "https://empresa.com"
cRequis := "api/consulta funcionarios?matricula=000001"

//Trata os caracteres especiais (como espaço vazio)
cRequis := Escape(cRequis)

//Instancia o consumo da API
oRestClient := FWRest():New(cURL)
oRestClient:setPath(cRequis)

//Ai aqui você já pode acionar os métodos para consumir a API
If oRestClient:Get(aHeadOut)

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação