почему 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(urlgzip=False):
        
        
    request req.Request(url)
        if 
    gzip:
            
    request.add_header('Accept-encoding''gzip, deflate')
        
        
    opener req.build_opener()
        
    opener.open(request)
        
        
    isGzip f.headers.get('Content-Encoding')
        
    data_src f.read()
            
        if 
    isGzip == 'gzip':
            print(
    'is GZIP!')
            
    data zlib.decompress(data_src16+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(urlTrue#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")