有個Jsp製作的網站有需要登入後才可以擷取一些資訊,一般網站,Asp,ASPX,都是通過Cookie或Session(使用Cookie做標誌)保持登入狀態,因此先訪問登入頁擷取Cookie,再將Cookie附加到請求中,擷取目標頁即可, 結果昨天在那個Jsp網站中搞了一個下午無果,POST登入頁是成功的,也返回了Seesion資訊(如下) ,在設定request.AllowAutoRedirect = false;後可以正確的擷取到JSESSIONID,但是把這個JSESSIONID附加到新的請求(需要採集的頁面時),伺服器始終返回500錯誤!,
鬱悶中反覆觀察標題資訊.
//==============登後返回的標題資訊
HTTP/1.1 302 Moved Temporarily
Set-Cookie: JSESSIONID=A8E7B16C1786F6E3D40457CF4258C4C2; Path=/ScoreTable
Location: http://xxx.com:8080/xxx.jsp
Content-Type: text/html;charset=GBK
Content-Length: 0
Date: Thu, 19 Feb 2009 03:07:28 GMT
Server: Apache-Coyote/1.1
//======================
資訊中的Location時重新導向命令產生的,這個在使用IE時會把頁面先定位到 http://xxx.com:8080/xxx.jsp,不過現在使用程式訪問應該在擷取cookie後可以忽略,直接存取目標頁即可(至少在asp,aspx這樣的環境中是沒問題的)....
最後無奈在程式完成cookie擷取後先訪問一次http://xxx.com:8080/xxx.jsp,再訪問目標頁面,結果奇蹟出現,資料擷取成功,當然2個請求都附加上擷取的session標誌.
具體原因不知道,推測是Apache伺服器的特殊性引起了,它也許會針對某個Session(一個會話)檢測Location命令有沒有被正確執行, 最後望有達人指點!