À L'Aide De IdHTTP1.Obtenez avec Delphi et Indy 9/10 sur un serveur web renvoie l'exception

J'ai un problème de réception d'un favicon.ico à partir d'un serveur web à l'aide de Delphi et Indy 9/10. Les autres serveurs ne fonctionnent bien. Le problème n'est pas avec ce serveur web, comme wget utilitaire de ligne de commande obtient le fichier correctement.

voici le résultat de wget:

c:\a>wget http://perforce.eigenbase.org:8080/favicon.ico
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
--2013-01-27 00:12:39--  http://perforce.eigenbase.org:8080/favicon.ico
Resolving perforce.eigenbase.org... 72.14.190.177
Connecting to perforce.eigenbase.org|72.14.190.177|:8080... connected.
HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
Length: unspecified
Saving to: `favicon.ico'

    [ <=>                                   ] 2.862       --.-K/s   in 0s

2013-01-27 00:12:40 (143 MB/s) - `favicon.ico' saved [2862]

Voici mon Delphi Indy 9/10 exemple de code. Il génère une "fermeture de la Connexion Gracieusement" l'Exception", et le résultat est une chaîne vide.

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
  s := '';
  try
    s := IdHTTP1.Get('http://perforce.eigenbase.org:8080/favicon.ico');
  except
     on E: Exception do
     begin
          {$IFDEF DEBUG}ShowMessage('get error:'+E.Message){$ENDIF};
     end;
  end;
  ShowMessage(IntToStr(Length(s)));
end;

Si j'essaie de le même code avec un autre serveur, par exemple:

s := IdHTTP1.Get('http://www.google.com/favicon.ico');

tout fonctionne bien.

Est-il une solution pour obtenir le http://perforce.eigenbase.org:8080/favicon.ico fichier à l'aide de IdHTTP1.Obtenir à partir du serveur?

Changer le Request.UserAgent de votre IdHTTP1 composant par exemple pour Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1 et vous serez amende. Le serveur est en rejetant vous (de façon officielle) juste parce que vous agissez en tant que par défaut Mozilla/3.0 (compatible; Indy Library) agent (tout à fait une politique cruelle, mais il le fait).
De toute façon, vous n'avez pas à recevoir la Get réponse comme une chaîne de caractères. Puisque vous êtes évidemment le téléchargement d'un fichier, que vous ne serez pas afficher sous forme de texte (pourquoi souhaitez-vous afficher une icône dans un fichier texte), mais vous aurez peut-être de les enregistrer ou de les manipuler avec elle comme avec un fichier, vous pouvez utiliser le Get la surcharge, qui reçoit la réponse à un flux de données.

OriginalL'auteur Casady | 2013-01-26