почему google.ru не отдает скрипту gzip?

Discussion in 'PHP' started by Дикс, 6 Apr 2011.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    вот тестовый скрипт:

    PHP:
    import urllib.request as req
    import http
    .client
    import zlib
    #http.client.HTTPConnection.debuglevel = 1

    def test(url, gzip=False):
        
        
    request = req.Request(url)
        if 
    gzip:
            
    request.add_header('Accept-encoding', 'gzip, deflate')
        
        
    opener = req.build_opener()
        
    f = opener.open(request)
        
        
    isGzip = f.headers.get('Content-Encoding')
        
    data_src = f.read()
            
        if 
    isGzip == 'gzip':
            print(
    'is GZIP!')
            
    data = zlib.decompress(data_src, 16+zlib.MAX_WBITS)
        else:        
            print(
    'its NOT GZIP!')
            
    data = data_src

        data 
    = data.decode('utf-8', 'ignore')
        print(
    'downloaded: %d bytes' % len(data_src))
        print(
    'decompressed: %d bytes' % len(data))
        print(
    '-'*40)
            
    #url = 'http://www.thedowntown.ru'
    url = 'http://www.google.ru'

    test(url) # without gzip
    test(url, True) #with gzip
    внизу можно указать скачиваемый урл
    если качать даунтаун, получаем:

    а если качать гугл:

    при этом, если качать гугл браузером, то там видно что он возвращает контент в gzip и заголовок Content-Encoding : gzip на месте
     
  2. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    а, в общем-то разобрался
    гзип он отдает только если отправлять реальный юзер-агент:

    is GZIP!
    downloaded: 8820 bytes
    decompressed: 24215 bytes

    интересно, что без юзер агента он возвращает несжатый ответ не в утф, а в вин2151
     
  3. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Это умолчания(defaults).

    А заголовок, по стандарту, называется 'Accept-Encoding', а не 'Accept-encoding', может быть и в этом причина.
    (з.ы. я у себя ставлю "deflate, gzip, x-gzip, identity, *;q=0")