2010-12-13 45 views
1

Je souhaite récupérer une page Web à partir d'un site ASP.NET accessible uniquement depuis une session. J'utilise Apache HttpClient. J'ouvre d'abord la page principale du site, puis je recherche le lien vers la page "objectif", puis je lance une requête GET pour la page "objectif". Le problème est que lorsque j'obtiens la réponse pour la deuxième requête GET, j'obtiens toujours la même (première) page. Si j'ouvre le site avec Firefox ou Google Chrome, j'obtiens la page "objectif".Gestion d'une session avec un site ASP.NET à partir de Java (Apache HttpClient)

Dès la première réponse du serveur, je reçois les en-têtes suivants:

HTTP/1.1 200 OK 
Date: Sun, 12 Dec 2010 19:03:56 GMT 
Server: Microsoft-IIS/6.0 
Platform: Mobitel Pla.NET 
Node: 4 
X-Powered-By: ASP.NET 
X-AspNet-Version: 1.1.4322 
Set-Cookie: ASP.NET_SessionId=0vpgd055cifko3mnw4nkuimz; path=/ 
Cache-Control: no-cache, must-revalidate 
Content-Type: text/html; charset=utf-8 
Content-Length: 7032 

J'inspectée le trafic avec Wireshark et tous les en-têtes regarder OK. Je renvoie le cookie correct au serveur sur la deuxième demande GET. J'utilise Apache HttpClient. J'ai seulement une instance de DefaultHttpClient et je réutilise cela pour la deuxième requête. J'ai la politique de cookie BROWSER_COMPATIBILITY.

Des idées?

Répondre

0

J'ai trouvé mon erreur stupide. L'erreur a été que j'envoyais la deuxième requête GET à un lien, sans remplacer les codes de caractère esperluette.

Ex:

/(0vpgd055cifko3mnw4nkuimz)/Mp.aspx?ni=1482&pi=72&_72_url=925b9749-b7c7-4615-9f1a-9b613c344c82 

C'est faux, parce que j'envoie & au lieu de &

La bonne façon de le faire est:

/(0vpgd055cifko3mnw4nkuimz)/Mp.aspx?ni=1482&pi=72&_72_url=925b9749-b7c7-4615-9f1a-9b613c344c82 
1

Vous devez renvoyer cet en-tête du client (envoyer le cookie que vous avez reçu) dans toutes vos autres demandes:

Cookie: ASP.NET_SessionId=0vpgd055cifko3mnw4nkuimz; // and all other cookies 

Cela devrait faire l'affaire