Question

Je rencontre un problème dans le composant delphi Tidhttp dans lequel la procédure GET ne peut pas chercher une URL spécifique, mais sur d'autres urls il fonctionne. Exemple: ce code renvoie un response.datastring vide. Response.datastring est vide seulement avec cette error_url mais avec d'autres urls la response.datastring a une valeur. Je dois récupérer le contenu de cette error_url pour résoudre ce problème.

procedure TForm1.Button1Click(Sender: TObject);
var
  Response : TStringStream;
  error_url: string;
begin
  error_url := 'http://www.chefscatalog.com/international/home.aspx'; //error url
  Response := TStringStream.Create;
  try
    IdHTTP1.Get(error_url, Response);
    Memo1.Text := Response.DataString;
  finally
    FreeAndNil(Response);
  end;
end;

Par ailleurs idHTTP1 rediriger propriété est définie ici true si la redirection est pas le problème.

Ceci est l'exception que je rencontrais: 1. http / 1.1 302 Found 2. EDecompressionError avec le message «Erreur ZLib (-3)

Vous pouvez télécharger le code source (qui est de indytest.zip) de ce projet dans ce lien

Était-ce utile?

La solution

La raison est le site que vous essayez de frapper est à la recherche d'un cookie et si elle ne se le mettre essaie de le régler, et fait ensuite une redirection 302 revenir soi-même.

Parce que vous ne l'avez pas accroché un gestionnaire de cookies que vous terminez dans une boucle 302 redirect que le site continue de vérifier les cookies, le réglage et puis redirection.

cookies poignée et il fonctionne très bien avec un seul 302.


Cependant, il semble que, pour une raison quelconque Indy ignore les cookies qui sont envoyés par ce site. Je fouetté un code de test si je frappe http://www.google.com j'obtenir

New cookie: PREF
New cookie: NID
Redirecting (1) to: http://www.google.co.nz/
New cookie: PREF
New cookie: NID

est les en-têtes que google envoyer

Set-Cookie: PREF=ID=3c7e441914b902ae:TM=1268686477:LM=1268686477:S=Z-Gwqx52jK0V1rYR; expires=Wed, 14-Mar-2012 20:54:37 GMT; path=/; domain=.google.com
Set-Cookie: NID=32=vsOZvkr4AOZ7320d_OBPf2zR2jau4E6pupbOe_ZaaX4DNjahTzSV-mSA55naTk-5cXQcn7SNEp7uSxbE_cFrL9ZftGApTGZMPGKzcz3_NZE_2MYpWG5PGbwWFw9t2d_R; expires=Tue, 14-Sep-2010 20:54:37 GMT; path=/; domain=.google.com; HttpOnly

Cependant, pour cet autre site, je reçois dans ma sortie de débogage

Redirecting (1) to: http://www.chefscatalog.com/error.aspx?impsid=0
Redirecting (2) to: http://www.chefscatalog.com/error.aspx?impsid=0

tout le chemin jusqu'à 15 tentatives .. si nous regardons ce que les en-têtes le site renvoie

Set-Cookie: ASP.NET_SessionId=4o0bpi45evee0d45qos1uy55; path=/; HttpOnly
Set-Cookie: ChefsSite=CartID=00000000-0000-0000-0000-000000000000&cst=f4t8YpBpAAkNiRUd9BEf2luKAA%3d%3d&act=c0f2VBCSbv30F4kasnvWS5OfJQ%3d%3d&CookiesEnabled=False; expires=Wed, 14-Apr-2010 20:54:22 GMT; path=/

Je note là le site manque le domaine de la fin de la Set-Cookie, ce qui est bizarre, mais je ne pense pas que c'est un must de la RFC. si nous regardons les AddCookie / 2 méthodes de idCookieManager son vouloir un hôte qui alors peut-être param ne fonctionnera pas sur les Set-cookies qui ne donnent pas le domaine.

Je l'ai testé sur un couple plusieurs sites et tout fonctionne très bien si l'ensemble-Cookie domaine = .google.com;

Il est également intéressant de noter que sur le idHttp.OnRedirect si vous regardez

idHttp.Response.RawHeaders.Text

pour le site qui ne fonctionne pas, vous ne voyez pas les Set-témoins, mais sur les sites qui ne fonctionnent que vous voyez le Set-Cookies ...

Cependant, si je mets idhttp useragent à

    Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.1) Gecko/20100122 firefox/3.6.1

(d'une autre réponse)

il semble pick-up les biscuits très bien

    New cookie: ASP.NET_SessionId
    New cookie: ChefsSite
    Redirecting (1) to: http://www.chefscatalog.com/international/home.aspx
    New cookie: ChefsSite

Bizarre.

Autres conseils

Vérifier l'événement OnRedirect. Pour une raison quelconque, vous allez être redirigé vers une page d'erreur.

http://www.chefscatalog.com/error.aspx?impsid=0

Ce qui, à son tour, vous redirige vers la même page d'erreur jusqu'à ce que vous épuisez votre RedirectMaximum (15).

Mise à jour:

Une fois que vous êtes redirigé vers la page d'erreur, Wizzard ci-dessous explique pourquoi il réoriente constamment à la même page d'erreur à plusieurs reprises. Cookies.

La raison pour laquelle vous êtes redirigé en premier lieu est sans doute que le site ne reconnaît pas (ou comme) votre chaîne de l'agent utilisateur (dans la propriété de demande). Par défaut, il est "Mozilla / 3.0 (compatible; Indy Library)". Changez-le à une chaîne courante utilisée par FireFox , IE ou tout autre navigateur reconnu.

Je l'ai essayé avec "Mozilla / 5.0 (X11; U; Linux i686; fr; rv: 1.9.2.1) Gecko / 20100122 Firefox / 3.6.1", et il semble fonctionner très bien

Vous pouvez trouver plus de détails dans le Indy KB PDF .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top