Node.js如何通过TCP套接字进行ungzip GET响应

时间:2017-03-17 21:36:32

标签: node.js tcp get gzip

当我向Hearthstone网站发送GET请求时,一旦我连接了所有发送的帧,我仍然会得到一个压缩字符串

我的要求:

GET /hearthstone/en/ HTTP/1.1
Host: eu.battle.net
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: https://www.google.fr/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Cookie: eu-cookie-compliance-agreed=1; _ga=GA1.3.780909635.1489783325; _gat_bnetgtm=1

我的日志:

[Socket] > Connected !
Connected to 185.60.115.40
[Socket - Data] > Received data !
--- Header ---
HTTP/1.1 200 OK
Date: Sat, 18 Mar 2017 10:56:12 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Retry-After: 600
Content-Language: en-GB
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=4000
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html;charset=UTF-8

4331
▼      ♥��{�∟W�'��
�1�4_`�4→������s㑑�*V��H��(�2����s�=��8w��▼v���▲�3���d���[�k��N�rw�_U��������↔��xd�q<zIe♠T�Ƅe�݁��1▼졲b��|#▼w���l8U���ɠ�L�z�(�?�6��b♠e���y�bw�N�XUy>��↑↑"�*�U���MJ50F♦�Z�_�_�6���↓�R>Q�j☼��*9V;b�ȧj�nZ��j��~�XQ��U�)��$IE�&�'l��'i�n��R[�&iv`¶j☻�����/TRcT☻��E+&�♥6e��∟f�→i\�◄�☻��♣=������+]�Ŗ�|)�§)���r<e�v⸉♀}���Ȳm�EI�Ca{�u_�♫z,���↑���:,[��X�T6J�����§�����♂"?◄▲w�g♣Q �(♠Fu4S
l�-��l�
������~K�>*�Leu�T�(�↓�ָ-p ���q��'j(����▲$M�9����*tz►d`����T↔��[=�?Le��+§ȯL��c�YZ���R�
♀�zY�DYBL��♦��  ‼��n�y������gh�x²r�f����ady1e�&�P������Y�ͭ�►7�y1��}
v�����,�◄‼-��
,�X�$n∟Z>�=�$��1���k���'*rc�☼bK��§$�r�ͅ�����+�X�§♂/f�↔s♂§mΤ�#ԳC�ZV↑�    g☺�l7�<♠f��$t���*����H►��'�Jҗ�׍�z�����hU*i↕��
��w�΃f�↕�FA�8,f�=�4QQ�]�♫-�     �#8♥��V■♂� �ȋ�������g♥♣▼�!�B˶D↕A↑E<H,♂� dQ1�N ��sm'♫�L☻m()� f��<I֯����\♠Y�H�TH�8�\�Cԡ7cGz�↔p x Ӄ,��P��k�>wb�8�#� i�‼~∟+t�▼♦�+"W��‼:��@�Z�Q� �0r�↔8"�↔?N<��aU�Q��������8�↓w��B��VB�Z♫�☺↨◄�9���l��§��P▼H1?☻Nv¶J.l
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket - Data] > Received data !
[Socket] > End message received !
--- HTML ---
<Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 44 61 74 65 3a 20 53 61 74 2c 20 31 38 20 4d 61 72 20 32 30 31 37 20 31 30 3a 35 36 3a 31 32 20 47 ... >

我的代码:

send ()
{
    let chuncks = []


    this.client.socket.once('data', data =>
    {
        /* Header */
        chuncks.push(data)
        console.log('--- Header ---')
        console.log(data.toString())

        this.client.socket.on('data', data =>
        {
            chuncks.push(data)
        })
    })

    this.client.socket.on('end', () =>
    {
        let html = Buffer.concat(chuncks)
        console.log('--- HTML ---')
        console.log(html)
        let decoded = require('zlib').gunzipSync(html)

    })

    this.client.write( this.request ) // Above request
}

而且,我不明白的是,为什么出现问题,我能做到这一点吗?

谢谢!

0 个答案:

没有答案