2012-04-26 33 views
6

Tôi đã tìm kiếm một lúc và tôi không tìm thấy câu trả lời rõ ràng. Tôi đang cố gắng đăng nhập vào một webstie. https://hrlink.healthnet.com/ Trang web này chuyển hướng đến trang đăng nhập không phải là sự đồng ý. Tôi phải đăng thông tin đăng nhập của mình vào URL được chuyển hướng.Nhận URL sau khi chuyển hướng bằng HttpClient.Execute (HttpGet)

Tôi đang cố gắng viết mã này bằng Java nhưng tôi không hiểu cách lấy URL từ phản hồi. Nó có thể trông hơi lộn xộn nhưng tôi có nó theo cách này trong khi tôi đang thử nghiệm.

HttpGet httpget = new HttpGet("https://hrlink.healthnet.com/"); 
    HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity(); 

    String redirectURL = ""; 

    for(org.apache.http.Header header : response.getHeaders("Location")) { 
     redirectURL += "Location: " + header.getValue()) + "\r\n"; 
     }   

    InputStream is; 
    is = entity.getContent(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
    } 
    is.close(); 

    String result = sb.toString(); 

Tôi biết tôi được chuyển hướng vì chuỗi kết quả của tôi hiển thị là trang đăng nhập thực sự nhưng tôi không thể nhận URL mới.

Trong FireFox tôi đang sử dụng TamperData. Khi tôi điều hướng đến trang web này https://hrlink.healthnet.com/ Tôi có một GET với 302 - Đã tìm thấy và Vị trí của Trang Đăng nhập. Sau đó, GET khác vào Trang Đăng nhập thực tế

Bất kỳ trợ giúp nào được đánh giá cao cảm ơn bạn.

+0

bản sao có thể có của [HttpClient 4 - cách chụp URL chuyển hướng cuối cùng] (http://stackoverflow.com/questions/1456987/httpclient-4-how-to-capture-last-redirect-url) – kolen

Trả lời

8

Check-out w3c documentation:

10.3.3 302 Tìm thấy

Các tạm URI NÊN được đưa ra bởi các lĩnh vực Vị trí trong các phản ứng. Trừ khi phương thức yêu cầu là HEAD, thực thể của đáp ứng NÊN có chứa một lưu ý siêu văn bản ngắn với một siêu liên kết tới (các) URI mới.

Nếu mã trạng thái 302 được nhận theo yêu cầu không phải là GET hoặc HEAD, tác nhân người dùng PHẢI KHÔNG tự động chuyển hướng yêu cầu trừ khi người dùng có thể xác nhận yêu cầu, vì điều này có thể thay đổi các điều kiện theo yêu cầu đã được ban hành.

Một giải pháp là sử dụng phương thức POST để phá vỡ tính năng tự động chuyển hướng ở phía khách hàng:

HttpPost request1 = new HttpPost("https://hrlink.healthnet.com/"); 
HttpResponse response1 = httpclient.execute(request1); 

// expect a 302 response. 
if (response1.getStatusLine().getStatusCode() == 302) { 
    String redirectURL = response1.getFirstHeader("Location").getValue(); 

    // no auto-redirecting at client side, need manual send the request. 
    HttpGet request2 = new HttpGet(redirectURL); 
    HttpResponse response2 = httpclient.execute(request2); 

    ... ... 
} 

Hope this helps.

Các vấn đề liên quan