【问题标题】:Managing a session with ASP.NET site from Java (Apache HttpClient)从 Java (Apache HttpClient) 管理与 ASP.NET 站点的会话
【发布时间】:2010-12-13 12:17:56
【问题描述】:

我想从只能从会话中访问的 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 政策。

有什么想法吗?

【问题讨论】:

    标签: java asp.net apache http httpclient


    【解决方案1】:

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

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

    这应该可以解决问题

    【讨论】:

      【解决方案2】:

      我发现了我的愚蠢错误。

      错误是我将第二个 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
      

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 2011-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多