2011-12-05 14 views
5

के साथ प्रत्येक अनुरोध के साथ मूल लेख प्रमाण-पत्र पास करना मैं एक वेब अनुप्रयोग के लिए एक साधारण धूम्रपान परीक्षण लिखने की कोशिश कर रहा हूं।HtmlUnit WebClient

एप्लिकेशन सामान्य रूप से फॉर्म आधारित प्रमाणीकरण का उपयोग करता है, लेकिन मूल लेख भी स्वीकार करता है, लेकिन डिफ़ॉल्ट रूप से फॉर्म आधारित प्रमाणीकरण है, यह कभी भी प्रमाणीकरण आवश्यक नहीं भेजता है, बल्कि इसके बजाय लॉगिन फ़ॉर्म भेजता है।

परीक्षण में मैं

WebClient webClient = new WebClient(); 

DefaultCredentialsProvider creds = new DefaultCredentialsProvider(); 

// Set some example credentials 
creds.addCredentials("usr", "pwd"); 

// And now add the provider to the webClient instance 
webClient.setCredentialsProvider(creds); 

webClient.getPage("<some url>") 

का उपयोग कर मैं भी एक WebRequest वस्तु में साख भरने और webClient.getPage विधि से गुजर रहा है कि कोशिश की मूल प्रमाणीकरण हैडर भेजने का प्रयास करें।

लेकिन सर्वर पर मुझे प्रमाणीकरण हेडर नहीं मिलता है। मुझे संदेह है कि वेब क्लाइंट केवल प्रमाणीकरण शीर्षलेख भेजता है अगर इसे सर्वर द्वारा स्पष्ट रूप से पूछा जाता है, जो कभी नहीं होता है।

तो प्रश्न यह है कि मैं वेब क्लाइंट को प्रत्येक अनुरोध पर प्रमाणीकरण शीर्षलेख कैसे भेज सकता हूं, जिसमें पहले एक भी शामिल है?

+0

मैं स्पष्ट नहीं कर रहा हूँ आप से क्या मतलब है की तरह एक प्रमाणीकरण हैडर बना सकते हैं "सिर्फ लॉगिन प्रपत्र भेजता है" - - क्या यह आपके ऐप के एक पेज पर दिखाई देता है? मैंने बस कुछ पुराने कोड को खोला है जो कुछ डोमेन सुरक्षा द्वारा डाले गए ब्राउज़र प्रमाणीकरण संवाद वाले साइट का परीक्षण करता है, न कि एप्लिकेशन द्वारा, और मैंने मूल रूप से ठीक किया जैसा आपने किया था, जिसने ठीक काम किया था। –

+0

इस तरह से आवेदन लागू किया गया है। मूल प्रमाणीकरण केवल परीक्षण और अन्य मशीनों के लिए ऐप के साथ इंटरफेसिंग के लिए है। हम नहीं चाहते हैं कि उपयोगकर्ता कभी भी ब्राउज़र द्वारा उत्पन्न एक बदसूरत मूल लेख फ़ॉर्म को देखना चाहें। –

उत्तर

15

यह मदद कर सकता है:

WebClient.addRequestHeader(String name, String value)

अधिक विशिष्ट एक इस

private static void setCredentials(WebClient webClient) 
    { 
    String username = "user"; 
    String password = "password"; 
    String base64encodedUsernameAndPassword = base64Encode(username + ":" + password); 
    webClient.addRequestHeader("Authorization", "Basic " + base64encodedUsernameAndPassword); 
    } 

    private static String base64Encode(String stringToEncode) 
    { 
    return DatatypeConverter.printBase64Binary(stringToEncode.getBytes()); 
    } 
संबंधित मुद्दे