2012-04-26 6 views
6

का उपयोग करके रीडायरेक्ट के बाद URL प्राप्त करना मैंने थोड़ी देर की खोज की है और मुझे स्पष्ट उत्तर नहीं मिला है। मैं एक वेबस्टी में लॉग इन करने की कोशिश कर रहा हूं। https://hrlink.healthnet.com/ यह वेबसाइट एक लॉगिन पृष्ठ पर रीडायरेक्ट करती है जो संगत नहीं है। मुझे अपने लॉगिन क्रेडेंशियल्स को रीडायरेक्ट यूआरएल पर पोस्ट करना होगा।HttpClient.Execute (HttpGet)

मैं जावा में इसे कोड करने की कोशिश कर रहा हूं लेकिन मुझे समझ में नहीं आता कि प्रतिक्रिया से यूआरएल कैसे प्राप्त करें। यह थोड़ा गन्दा लग सकता है लेकिन जब मैं परीक्षण कर रहा हूं तो मेरे पास यह तरीका है।

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(); 

मुझे पता है कि मुझे रीडायरेक्ट किया जाता है क्योंकि मेरा परिणाम स्ट्रिंग वास्तविक लॉगिन पृष्ठ होता है लेकिन मैं नया यूआरएल प्राप्त नहीं कर पा रहा हूं।

फ़ायरफ़ॉक्स में मैं TamperData का उपयोग कर रहा हूं। जब मैं इस वेबसाइट पर https://hrlink.healthnet.com/ पर नेविगेट करता हूं तो मुझे 302 - मिले और लॉगिन पेज का स्थान मिलता है। फिर एक और वास्तविक लॉगिन पृष्ठ

किसी भी मदद की बहुत सराहना की है धन्यवाद।

+0

[एचटीपी क्लाइंट 4 - अंतिम रीडायरेक्ट यूआरएल कैप्चर करने के तरीके] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1456987/httpclient-4-how-to-capture-last-redirect-url) – kolen

उत्तर

8

w3c documentation की जाँच करें:

10.3.3 302 मिली

अस्थायी यूआरआई जवाब में स्थान फ़ील्ड द्वारा दी जानी चाहिए। जब तक अनुरोध विधि HEAD नहीं थी, प्रतिक्रिया की इकाई में नए यूआरआई (ओं) के लिए हाइपरलिंक के साथ एक छोटा हाइपरटेक्स्ट नोट होना चाहिए।

यदि GET या HEAD के अलावा किसी अन्य अनुरोध के जवाब में 302 स्थिति कोड प्राप्त होता है, तो उपयोगकर्ता एजेंट को तब तक अनुरोध को स्वचालित रूप से रीडायरेक्ट नहीं करना चाहिए जब तक कि उपयोगकर्ता द्वारा इसकी पुष्टि नहीं की जा सके, क्योंकि यह उन शर्तों को बदल सकता है जिनके तहत अनुरोध जारी किया गया था।

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); 

    ... ... 
} 

आशा इस मदद करता है:

एक समाधान ग्राहक के पक्ष में ऑटो पुन: निर्देशित तोड़ने के लिए POST विधि का उपयोग करने के लिए है।

संबंधित मुद्दे