2013-01-01 29 views
10
System.setProperty("http.proxySet", "true"); 
System.setProperty("java.net.useSystemProxies", "true"); 
System.setProperty("http.proxyHost", "192.168.1.103"); 
System.setProperty("http.proxyPort", "3128"); 
System.setProperty("http.proxyUser", "user123"); 
System.setProperty("http.proxyPassword", "passwD123"); 

url = new URL("http://www.google.co.in"); 

हर बार में संभाल करने के लिए कैसे जब मैं इस कोड IOException फेंकता है जो कहते हैं कि HTTP प्रतिक्रिया कोड 407 HTTP 407 का मतलब है प्रॉक्सी प्रमाणीकरण आवश्यक उपयोग कर रहा हूँ। प्रॉक्सी यूज़र और प्रॉक्सी पासवर्ड सेट करते समय यह समस्या क्यों आ रही है। enter image description here
http 401 होगा यदि मैं गलत पासवर्ड डालता हूं लेकिन यह हमेशा मुझे 407 देता है, इसका मतलब है कि मेरा कोड उपयोगकर्ता नाम और पासवर्ड नहीं लेता है। उपरोक्त कोड में उपयोगकर्ता 123 उपयोगकर्ता नाम है और passwD123 प्रॉक्सी प्रमाणीकरण के लिए पासवर्ड है।http 407 प्रॉक्सी प्रमाणीकरण आवश्यक: जावा कोड

+1

आप क्या http ग्राहक का उपयोग कर रहे हैं:

-Djdk.http.auth.tunneling.disabledSchemes= 

मैं से पता चला:

इस मामले में, इस प्रणाली प्रॉपर्टी जोड़ते हैं? – Cratylus

+0

मैं जावा में मैनुअल प्रॉक्सी, स्वचालित प्रॉक्सी, कोई प्रॉक्सी समर्थन ब्राउज़र बनाने की कोशिश कर रहा हूं। फ़ायरफ़ॉक्स जैसे ब्राउज़र इसका समर्थन करता है, टूल्स-> विकल्प-> उन्नत-> नेटवर्क-> सेटिंग। – dayitv89

उत्तर

19

http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html

मैं समाधान धन्यवाद श्री विनोद सिंह पाया। जावा

में

प्रॉक्सी प्रमाणीकरण सामान्य कॉर्पोरेट नेटवर्क प्रॉक्सी सर्वर के माध्यम से इंटरनेट पहुँच प्रदान करते हैं और कई बार तो उन्हें भी प्रमाणीकरण की आवश्यकता। एप्लिकेशन कॉर्पोरेट इंट्रानेट के बाहर सर्वरों के कनेक्शन खोल सकते हैं। इसलिए किसी को प्रोग्रामिक रूप से प्रॉक्सी प्रमाणीकरण करना है। सौभाग्य से जावा प्रॉक्सी प्रमाणीकरण करने के लिए एक पारदर्शी तंत्र प्रदान करता है।

below-

import java.net.Authenticator; 

class ProxyAuthenticator extends Authenticator { 

    private String user, password; 

    public ProxyAuthenticator(String user, String password) { 
     this.user = user; 
     this.password = password; 
    } 

    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(user, password.toCharArray()); 
    } 
} 

की तरह एक साधारण वर्ग बनाएँ और कोड की इन पंक्तियों डाल से पहले अपने कोड एक URLConnection-

Authenticator.setDefault(new ProxyAuthenticator("user", "password")); 
System.setProperty("http.proxyHost", "proxy host"); 
System.setProperty("http.proxyPort", "port"); 

खोलता है अब सभी कॉल्स सफलतापूर्वक प्रॉक्सी प्रमाणीकरण के माध्यम से पारित होगा।

+2

मैनुअल प्रॉक्सी समर्थन के लिए यह कोड। – dayitv89

+0

मैंने उपयोगकर्ता और पासवर्ड के साथ एक्लिप्स पर रन कॉन्फ़िगरेशन में http और https प्रॉक्सी सेट की है, किसी कारण से यह अंतःक्रियात्मक रूप से काम करता है जो बहुत अजीब है। –

7

@GauravDS आपने कहा:

http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html मैं समाधान धन्यवाद श्री विनोद सिंह पाया। जावा में प्रॉक्सी प्रमाणीकरण सामान्य कॉर्पोरेट नेटवर्क प्रॉक्सी सर्वर के माध्यम से इंटरनेट का उपयोग प्रदान करते हैं और कभी-कभी उन्हें प्रमाणीकरण की भी आवश्यकता होती है। एप्लिकेशन कॉर्पोरेट इंट्रानेट के बाहर सर्वरों के कनेक्शन खोल सकते हैं। इसलिए किसी को प्रोग्रामिक रूप से प्रॉक्सी प्रमाणीकरण करना है। सौभाग्य से जावा प्रॉक्सी प्रमाणीकरण करने के लिए एक पारदर्शी तंत्र प्रदान करता है। नीचे एक सरल वर्ग बनाएं- ।


और कोड को इन कोडों को एक यूआरएल खोलने से पहले कोड करें- Authenticator.setDefault(new ProxyAuthenticator("user", "password")); System.setProperty("http.proxyHost", "proxy host"); System.setProperty("http.proxyPort", "port"); अब सभी कॉल सफलतापूर्वक प्रॉक्सी प्रमाणीकरण से गुज़रेंगे।

क्या होगा यदि आप जिस साइट से कनेक्ट कर रहे हैं, उसे भी आपको अनुमति देने के लिए उपयोगकर्ता नाम/पासवर्ड की आवश्यकता है। डिफ़ॉल्ट प्रमाणीकरण (Authenticator.setDefault) सेट करना विफल हो जाएगा, मुझे लगता है कि बाहरी साइट प्रमाणीकृत उपयोगकर्ता की तलाश करेगी।

कोई विचार? .... कोई?

संपादित करें: 1 पहले इस कोड का उपयोग किया गया था और त्रुटि (407) प्रॉक्सी प्रमाणीकरण आवश्यक था। मुझे विश्वास है कि ऐसा इसलिए था क्योंकि विभिन्न होस्टों द्वारा प्रमाणीकरण का अनुरोध किया गया था। और जब आप एक होस्ट के लिए एक उपयोगकर्ता/पास के साथ एक डिफ़ॉल्ट प्रमाणीकरण सेट करते हैं, तो प्रमाणीकरण अन्य अनुरोध करने वाले होस्ट के लिए विफल हो जाएगा।मैंने कल सरल परिवर्तनकर्ता वर्ग में निम्नलिखित परिवर्तन किया और अब यह एक आकर्षण की तरह काम करता है।

protected PasswordAuthentication getPasswordAuthentication() 
    { 
    String requestingHost = getRequestingHost(); 
    if (requestingHost == proxyHost){ 
     System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost); 
     return new PasswordAuthentication(proxyuser,proxypass.toCharArray()); 
    } 
    else{ 
     System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost); 
     return new PasswordAuthentication(sharepointusername,sharepointpassword.toCharArray()); 
    } 

    } 

अधिक यहाँ जानकारी: http://blog.ashwani.co.in/blog/2013-07-29/access-sharepoint-webservices-from-java-behind-proxy/

+0

साइट प्रमाणीकरण के लिए क्या http प्रतिक्रिया ?? कॉर्पोरेट/संस्थान नेटवर्क में प्रॉक्सी सर्वर के लिए तंत्र के ऊपर । – dayitv89

+0

उपरोक्त मेरी प्रतिक्रिया संपादित की। – TheAshwaniK

+1

आप 'getRequestorType() == RequestorType.PROXY' के लिए भी जांच सकते हैं। प्रमाणीकरण का मतलब है कि अनुप्रयोगों पर क्रेडिट या लॉगिन करने का मतलब आम तौर पर 401 का उपयोग करता है और प्रॉक्सी 407 का उपयोग करते हैं। –

1

जवाब एक Authenticator उपयोग करने के लिए सामान्य स्थिति के लिए सही है। हालांकि, Java 8u111 में HTTP 407 का एक अन्य कारण और बाद में यदि आप प्रॉक्सी के विरुद्ध बेसिक प्रमाणीकरण का उपयोग कर रहे हैं। https://confluence.atlassian.com/kb/basic-authentication-fails-for-outgoing-proxy-in-java-8u111-909643110.html