English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Hoje, ao fazer uma solicitação HTTP com nodejs, os dados retornados são um arquivo html, e ainda assim usei o método de análise de dados json que uso antes. Como esperado, ocorreu um erro: SyntaxError: token inesperado em JSON na posição 0
Não há outra escolha, a não ser trocar um método, transformar o objeto Buffer recebido em toString, e ao imprimir descobriu-se que é um código ilegível.
A primeira impressão é de que é um problema de codificação, pesquisei no google e vi a documentação oficial, e resumo três métodos:
1、toString com a codificação como parâmetro.
2、usar iconv-alterar a codificação lite.
3、usar cheerio para carregar html.
Mas nenhum dos três métodos mencionados acima era o meu erro. Depois de ver que alguém no cnode tinha um problema semelhante, embora não completamente idêntico, alguém mencionou usar compressão gzip, e realmente encontrei no meu cabeçalho de solicitação gzip compression = =. Fecho a mão manualmente.
Agora que sabemos o problema, a solução é muito fácil.
Primeiro vamos instalar o zlib com npm install zlib;
Depois de incluir no cabeçalho var zlib = require('zlib');
Depois de consultar a documentação oficial, descobri que há dois métodos de descompressão, um é sincrono e o outro é assíncrono.
Vou usar a forma assíncrona aqui.
zlib.unzip(chunk, function(error, res) { console.log(error); console.log(res+"; });
Aqui, o chunk é o nosso objeto buffer recebido. Note que o callback assíncrono tem dois parâmetros, o primeiro é a mensagem de erro e o segundo é a string html necessária.
Se precisar usar sincronização, chame zlib.unzipSync(buffer); ps: eu recebi um erro ao testar. Error: final inesperado do arquivo
Bem, até aqui, meu problema foi resolvido perfeitamente.
Acabou aqui, essa solução para o problema de código ilegível ao usar http request no nodejs é tudo o que vou compartilhar com vocês. Espero que isso ajude. E peço que vocês apóiem o Tutorial Grito.