2012-08-29 6 views
5

मैंने वेबसाइट से फ़ाइल डाउनलोड करने के लिए कुछ कोड लिखा है। कोड एक परीक्षण http यूआरएल के खिलाफ ठीक काम करता है। जैसे ही मैं यूआरएल को https में बदलता हूं, मुझे कनेक्ट समय मिल जाता है।किसी HTTPS URL से फ़ाइलें डाउनलोड करने के लिए जावा का उपयोग

System.setProperty("http.proxyHost","trproxy.rwe.com") ; 
System.setProperty("http.proxyPort", "80") ; 
Authenticator.setDefault (new MyAuthenticator("USER","PW")); 
//URL url = new URL("http","www.treasury.gov",80,"/ofac/downloads/sdn.csv",new sun.net.www.protocol.http.Handler()); THIS WORKS 
URL url = new URL("https", "downloads.elexonportal.co.uk",443,"/bmradataarchive/download?key=MYKEY&filename="+filename,new sun.net.www.protocol.https.Handler()); 
url.openConnection(); 
InputStream reader = url.openStream(); 
FileOutputStream writer = new FileOutputStream("C:/downloads/"+filename); 

मैं एक ब्राउज़र में https यूआरएल कॉपी करते हैं, मैंने पूछा रहा हूँ जहाँ मैं फाइल को सेव करना चाहते हैं और यह ठीक काम करता है। किसी भी मदद की बहुत सराहना की। मैं this की कोशिश की है, लेकिन काम नहीं किया

धन्यवाद क्रिस

+0

यहाँ एक नज़र: http://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https के लिए –

उत्तर

4

आप प्रमाणपत्र मुद्दों कर हो सकता है। जावा में HTTPS कनेक्शन के साथ काम करते समय यह आमतौर पर समस्या का सामना करना पड़ा है।

सबसे पहले, आप की जाँच करनी चाहिए और देखें कि क्या वह URL, जिससे आप कनेक्ट करने के लिए प्रयास कर रहे हैं एक प्रसिद्ध विश्वसनीय रूट CA द्वारा एक हस्ताक्षरित प्रमाणपत्र है, और वैध (समय सीमा समाप्त नहीं) है।

मैं आपके ब्राउज़र में यूआरएल को खोलने और प्रमाणपत्र जानकारी की जाँच की सिफारिश करेंगे।

बस एक FYI करें, आपकी ब्राउज़र और जावा द्वारा मान्यता प्राप्त उन द्वारा मान्यता प्राप्त विश्वसनीय रूट सीए के बीच एक डिस्कनेक्ट हो सकता है। यहाँ कैसे जावा द्वारा मान्यता प्राप्त उन पाने के लिए के बारे में एक और Stackoverflow सवाल यह है: How can I get a list of trusted root certificates in Java?

यह एक स्व-हस्ताक्षरित प्रमाणपत्र है, तो वहाँ हुप्स आप में आयात करने और एक स्थानीय KeyStore का उपयोग कर के बारे में के माध्यम से कूद करने की आवश्यकता होगी रहे हैं। कई साइटों और ब्लॉगों है कि ऐसा करने के लिए आपका मार्गदर्शन कर रहे हैं, यहाँ ऐसे ही एक ब्लॉग (मेरा नहीं) है: Adding self-signed https certificates to java keystore

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

आप निश्चित रूप से java.net.URL के बजाय HttpClient का उपयोग कर इस पर गौर करना चाहिए। यहां Apache page for HttpClient 4.2.1 है।

अंत में, आप HTTP या HTTPS के माध्यम से एक फ़ाइल स्थानांतरण करने के लिए देख रहे हैं, तो आप WebDAV विचार कर सकते हैं।

मैंने अतीत में जकार्ता स्लाइड वेबडावी क्लाइंट का उपयोग किया है। दुर्भाग्यवश, यह Slide is retired at this point जैसा दिखता है, लेकिन कुछ विकल्प हैं जो आप खोज के साथ पा सकते हैं।

अलावा

मैं अपने स्रोत कोड नमूना नीचे की नकल की और इसे और अधिक बारीकी से देखा। ऐसा लगता है कि आप http के लिए गुण सेट करते हैं, लेकिन https नहीं।

HTTPS अलग गुण है:

  • https.proxyHost
  • https।proxyPort

कोशिश सेटिंग: Oracle's Java Networking and Proxies पर खंड 2.2 में

System.setProperty("https.proxyHost","trproxy.rwe.com") ; 
System.setProperty("https.proxyPort", "443") ; 

देखो।

http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html

+0

फिलिप धन्यवाद जवाब देने के लिए समय लेना, यह System.setProperty था ("https ... जो समझ गया। मैं इस समाधान को इतना कठिन लग रहा था, इतना आसान !! – Chris

1

की तरह आपकी समस्या को प्रॉक्सी के साथ हो सकता है लगता है। इसे https का भी समर्थन करना चाहिए। इसके अलावा, आपको फ़ाइलों को डाउनलोड करने के लिए एचटीपी क्लाइंट 4 का उपयोग करना चाहिए, यह http कनेक्शन बनाने के लिए परिपक्व लाइब्रेरी है।

0

System.setProperty("http.proxyPort", "80") होना चाहिए System.setProperty("http.proxyPort", "443")

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