Solicitação-resposta HTTP com corpo compactado em Python

Eu só quero mostrar como solicitar a um servidor uma representação compactada de um recurso.

Neste exemplo específico, quero baixar o formato compactado da página inicial do Google.

A primeira coisa que tenho que fazer é definir o cabeçalho da minha solicitação e declarar que desejo uma representação compactada do recurso que estou pedindo (pensando de forma REST). Portanto, tenho que adicionar a representação gzip em meu campo de cabeçalho ‘Aceitar codificação’.

Então, quando receberei minha resposta, tenho que esvaziar o corpo da minha resposta. Se você olhar meu código, estou verificando se o corpo da resposta está realmente compactado ou não. Isso ocorre porque o servidor pode não ser capaz de fornecer a representação compactada do recurso que estou solicitando. Nesse caso, entregarei diretamente o corpo da resposta.

import urllib2 
from StringIO import StringIO
import gzip


request
= urllib2.Request('http://www.goolge.com')
request
.add_header('Accept-encoding', 'gzip,deflate')

response
= opener.open(request)

if response.info().get('Content-Encoding') == 'gzip':

buffer
= StringIO( response.read())
deflatedContent
= gzip.GzipFile(fileobj=buffer)

return deflatedContent.read()

else:

return response.read()