2012-08-29 14 views
5

Napisałem kod, aby pobrać plik ze strony internetowej. Kod działa dobrze przeciwko testowi http url. Jak tylko zmienię adres URL na https, otrzymam czas połączenia.Używanie języka Java do pobierania plików z adresu URL HTTPS

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

Gdybym skopiuj link do przeglądarki https, mam pytanie, gdzie chcesz zapisać plik i to działa dobrze. Każda pomoc bardzo doceniona. Próbowałem this ale nie działa

Dzięki Chris

+0

Sprawdźcie tutaj: http://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https –

Odpowiedz

4

Być może występują problemy z certyfikatami. Zwykle jest to problem, z którym miałem do czynienia w przeszłości podczas pracy z połączeniami HTTPS w Javie.

Najpierw należy sprawdzić, czy adres URL, z którym próbujesz się połączyć, ma podpisany certyfikat od znanego zaufanego głównego urzędu certyfikacji i jest ważny (nie wygasł).

Polecam otwarcie adresu URL w przeglądarce i sprawdzenie informacji o certyfikacie.

Tylko FYI może występować rozłączenie między zaufanymi głównymi urzędami certyfikacji rozpoznanymi przez przeglądarkę i tymi rozpoznawanymi przez Javę. Oto kolejny Stackoverflow pytanie o tym, jak uzyskać te, uznane przez Java: How can I get a list of trusted root certificates in Java?

Jeśli jest to certyfikat z podpisem własnym, to nie są obręcze trzeba będzie przeskoczyć dotyczące importowania go do i korzystania z lokalnego magazynu kluczy. Istnieje wiele witryn i blogów, które poprowadzi Cię przez ten sposób, tutaj jest jeden taki blog (nie moje): Adding self-signed https certificates to java keystore

Również podczas testowania z przeglądarki, to pomoże Ci sprawdzić, czy nie ma problemów proxy. Zdecydowanie sprawdź ustawienia przeglądarki, aby określić, czy korzystasz z serwera proxy.

Powinieneś zdecydowanie zajrzeć do HttpClient zamiast do java.net.URL. Oto Apache page for HttpClient 4.2.1.

Wreszcie, jeśli chcesz wykonać transfer plików przez HTTP lub HTTPS, możesz rozważyć WebDAV.

W przeszłości używałem do tego celu klienta aplikacji WebDAV firmy Jakarta Slide. Niestety wygląda to na Slide is retired at this point, ale istnieją alternatywy, które można znaleźć przy odrobinie poszukiwań.

ADDITION

skopiowałem swój przykładowy kod źródłowy i spojrzał na nią bliżej. Wygląda na to, że ustawiłeś właściwości dla http, ale nie https.

HTTPS posiada odrębne właściwości:

  • https.proxyHost
  • HTTPS.proxyPort ustawienie

Spróbuj:

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

Look w punkcie 2.2 na Oracle's Java Networking and Proxies.

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

+0

Philip Dzięki za poświęcając czas na odpowiedź, to był System.setProperty ("https ... to dostało.) Tak bardzo szukałem tego rozwiązania, tak prostego !! – Chris

1

wygląda Twój problem może być z prokurentem. Powinien także obsługiwać https. Powinieneś także użyć HttpClient 4 do pobierania plików, jego dojrzałej biblioteki do tworzenia połączeń http.

0

System.setProperty("http.proxyPort", "80") powinny być System.setProperty("http.proxyPort", "443")

Powiązane problemy