从Java管理ASP.NET站点的会话(Apache HttpClient)

时间:2010-12-13 12:17:56

标签: java asp.net apache http httpclient

我想从ASP.NET站点获取一个只能在会话中访问的网页。我正在使用Apache HttpClient。我首先打开网站的主页面,然后搜索“目标”页面的链接,然后我启动“目标”页面的GET请求。问题是当我得到第二个GET请求的响应时,我总是得到相同的(第一个)页面。如果我使用Firefox或Google Chrome打开网站,我会看到“目标”页面。

从服务器的第一个响应中我得到以下标题:

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

我使用WireShark检查了流量,所有标题看起来都不错。我在第二个GET请求中将正确的cookie发送回服务器。

我正在使用Apache HttpClient。我只有一个DefaultHttpClient实例,我将其重用于第二个请求。我有BROWSER_COMPATIBILITY Cookie政策。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您需要在所有进一步的请求中从客户端发回此标头(发回您收到的Cookie):

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

应该做的伎俩

答案 1 :(得分:0)

我发现了我的愚蠢错误。

错误在于我向链接发送了第二个GET请求,而没有替换&符号。

前:

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

这是错误的,因为我发送的是&而不是&

这样做的正确方法是:

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