Estou tentando usar TIdHTTP.Head('https://www.myurl.com/myfile.zip')
apenas para saber o tamanho do arquivo antes de baixá-lo.
Eu obtenho o tamanho do arquivo para poder abrir vários threads baixando partes do arquivo em paralelo, para que o download seja mais rápido.
Estava funcionando bem até recentemente, quando o Head()
método começou a gerar esta exceção:
O projeto myproject.exe levantou a classe de exceção EIdHTTPProtocolException com a mensagem 'HTTP/1.1 406 Não Aceitável'.
My TIdHTTP
está conectado a um TIdSSLIOHandlerSocketOpenSSL
, com estes SSLOptions
:
Method = sslvSSLv23
SSLVersions = [sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]
O que devo procurar?
Um
406 Not Acceptable
erro vem do servidor HTTP. Geralmente 1 significa que a solicitação tem um cabeçalho especificando o(s) tipo(s) de dados que o cliente deseja receber, mas o servidor não é capaz de enviar o recurso solicitado em nenhum desses tipos.Accept
1 Menos provável, o erro também pode significar que um firewall intermediário está bloqueando a solicitação.
TIdHTTP.Request.Accept
O valor padrão é'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
. Deve incluir arquivos, mas se você sabe que está interessado apenas em um arquivo e nada mais, você deve definir a*/*
propriedade como ..zip
.zip
TIdHTTP.Request.Accept
'application/zip'
Por outro lado: você NÃO deve ativar
sslvSSLv2
esslvSSLv3
naSSLVersions
propriedade SSLIOHandler. Eles são antigos e obsoletos, pois não são mais seguros, ninguém usa mais SSL v2.0 e v3.0.