O que estou tentando fazer aqui é obter os cabeçalhos de um determinado URL para determinar o tipo de MIME. Eu quero ser capaz de ver se http://somedomain/foo/
retornarei um documento HTML ou uma imagem JPEG, por exemplo. Portanto, preciso descobrir como enviar uma solicitação HEAD para poder ler o tipo MIME sem ter que baixar o conteúdo. Alguém conhece uma maneira fácil de fazer isso?
python
python-2.7
http
http-headers
content-type
Fuentesjr
fonte
fonte
urlparse
à mão, o que é mostrado por algumas respostas de classificação inferior.httplib
foi renomeado parahttp.client
.requests
não é fornecido com Python por padrão.urllib2 pode ser usado para executar uma solicitação HEAD. Isso é um pouco melhor do que usar o httplib, já que o urllib2 analisa a URL para você em vez de exigir que você divida a URL em nome de host e caminho.
Os cabeçalhos estão disponíveis via response.info () como antes. Curiosamente, você pode encontrar o URL para o qual foi redirecionado:
fonte
httplib.HTTPConnection
, que não controla os redirecionamentos automaticamente.Requests
Forma obrigatória :fonte
Eu acredito que a biblioteca Requests deve ser mencionada também.
fonte
allow_redirects
pode desativar apenas redirecionamentos POST / PUT / DELETE. Exemplo: solicitação principal sem redirecionamentoSomente:
Edit: Acabei de perceber que existe httplib2: D
Texto do link
fonte
request
. (Viz, vai funcionar, mas é um estilo ruim e se você quiser usarself
nele - difícil.)Para ser completo, tenha uma resposta Python3 equivalente à resposta aceita usando httplib .
É basicamente o mesmo código, só que a biblioteca não é mais chamada de httplib, mas de http.client
fonte
fonte
import
? +1 para ourlparse
- junto comhttplib
eles fornecem o conforto deurllib2
, ao lidar com URLs no lado da entrada.Como um aparte, ao usar o httplib (pelo menos em 2.5.2), tentar ler a resposta de uma solicitação HEAD irá bloquear (em readline) e subsequentemente falhar. Se você não emitir ler na resposta, você não conseguirá enviar outra solicitação na conexão, você precisará abrir uma nova. Ou aceite um longo atraso entre os pedidos.
fonte
Eu descobri que o httplib é um pouco mais rápido que o urllib2. Cronometrei dois programas - um usando httplib e outro usando urllib2 - enviando solicitações HEAD para 10.000 URLs. O httplib foi mais rápido por vários minutos. As estatísticas totais de httplib foram: real 6m21.334s usuário 0m2.124s sys 0m16.372s
E as estatísticas totais do urllib2 foram: real 9m1.380s usuário 0m16.666s sys 0m28.565s
Alguém mais tem opinião sobre isso?
fonte
E ainda outra abordagem (semelhante à resposta de Pawel):
Apenas para evitar métodos ilimitados no nível da instância.
fonte
Provavelmente mais fácil: use urllib ou urllib2.
f.info () é um objeto semelhante a um dicionário, então você pode fazer f.info () ['content-type'], etc.
http://docs.python.org/library/urllib.html
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/httplib.html
Os documentos observam que httplib normalmente não é usado diretamente.
fonte