Tôi muốn tải xuống tệp từ máy chủ đang sử dụng giao thức kết nối bảo mật HTTPS. Tôi có thể làm điều đó trong máy chủ bình thường, Nhưng, làm thế nào tôi có thể làm điều đó bằng cách sử dụng HTTPS. Nếu có ai đã sử dụng API mẫu, vui lòng giúp tôi tìm các tài nguyên hữu ích.Tải xuống tệp từ máy chủ HTTPS bằng cách sử dụng Java
Trả lời
Truy cập url HTTPS bằng Java giống nhau sau đó truy cập url HTTP. Bạn luôn có thể sử dụng
URL url = new URL("https://hostname:port/file.txt");
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
// .. then download the file
Tuy nhiên, bạn có thể gặp sự cố khi chuỗi chứng chỉ của máy chủ không thể xác thực. Vì vậy, bạn có thể cần vô hiệu xác nhận chứng chỉ cho mục đích thử nghiệm và tin tưởng tất cả chứng chỉ.
Để thực hiện điều ghi rằng:
// Create a new trust manager that trust all certificates
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Activate the new trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
// And as before now you can use URL and URLConnection
URL url = new URL("https://hostname:port/file.txt");
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
// .. then download the file
Công trình này tuyệt vời! Chỉ để hoàn thành, Guillaume Polet đã đề xuất một cách để cung cấp quyền khi cần thiết trong chủ đề này http://stackoverflow.com/questions/10479434/server-returned-http-response-code-401-for-url-https. Tôi cũng phải thêm phần đó. –
không có sự khác biệt nào khi tải xuống http so với https. mở một HttpURLConnection đến URL chính xác và đọc luồng kết quả.
@hariszhr - điều gì thật buồn cười? – jtahlborn
@hariszhr - HttpsURLConnection là một phân lớp của HttpURLConnection. bạn không cần phải sử dụng trực tiếp lớp đó một cách cụ thể. java sẽ sử dụng việc triển khai chính xác dựa trên giao thức của URL. trong tương lai, tôi sẽ không đề nghị trả lời câu trả lời mà không thực sự hiểu các chi tiết liên quan. – jtahlborn
Bạn sẽ có thể làm điều đó với chính xác cùng mã, trừ khi chứng chỉ SSL không xác thực được. Điều này thường xảy ra nếu nó là một ceritifcate tự ký, hoặc nếu chứng chỉ từ một CA mà hệ thống của bạn không biết.
Trong trường hợp này, bạn nên xử lý xác thực chứng chỉ trong mã. Chỉ có một phần của mã của bạn sẽ thay đổi. Mọi thứ khác sẽ vẫn như cũ.
Trước tiên hãy thử với cùng một mã và xem bạn có nhận được Chứng nhận ngoại lệ hay không.
Trên thực tế tôi đã có vấn đề tương tự. Tôi không thể tải xuống tệp từ máy chủ HTTPS. Sau đó, tôi cố định vấn đề này với giải pháp này:
// But are u denied access?
// well here is the solution.
public static void TheKing_DownloadFileFromURL(String search, String path) throws IOException {
// This will get input data from the server
InputStream inputStream = null;
// This will read the data from the server;
OutputStream outputStream = null;
try {
// This will open a socket from client to server
URL url = new URL(search);
// This user agent is for if the server wants real humans to visit
String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
// This socket type will allow to set user_agent
URLConnection con = url.openConnection();
// Setting the user agent
con.setRequestProperty("User-Agent", USER_AGENT);
//Getting content Length
int contentLength = con.getContentLength();
System.out.println("File contentLength = " + contentLength + " bytes");
// Requesting input data from server
inputStream = con.getInputStream();
// Open local file writer
outputStream = new FileOutputStream(path);
// Limiting byte written to file per loop
byte[] buffer = new byte[2048];
// Increments file size
int length;
int downloaded = 0;
// Looping until server finishes
while ((length = inputStream.read(buffer)) != -1)
{
// Writing data
outputStream.write(buffer, 0, length);
downloaded+=length;
//System.out.println("Downlad Status: " + (downloaded * 100)/(contentLength * 1.0) + "%");
}
} catch (Exception ex) {
//Logger.getLogger(WebCrawler.class.getName()).log(Level.SEVERE, null, ex);
}
// closing used resources
// The computer will not be able to use the image
// This is a must
outputStream.close();
inputStream.close();
}
Sử dụng chức năng này ... Hy vọng bạn sẽ có được hưởng lợi với giải pháp dễ dàng này.
- 1. Tải xuống tệp từ máy chủ php
- 2. Tải xuống tệp từ máy chủ SFTP bằng cách sử dụng JSch
- 3. Tải xuống tệp bằng curl từ máy chủ php
- 4. cách tải tệp lên máy chủ từ xa http bằng cách sử dụng java?
- 5. Tải xuống tệp từ internet bằng java: Cách xác thực?
- 6. Tải xuống từ HTTPS
- 7. Tải xuống tệp bằng cách sử dụng commons java apache?
- 8. Android - cách tải xuống tệp từ máy chủ web
- 9. Tải xuống tất cả các tệp từ Máy chủ FTP
- 10. Cách sử dụng HttpWebRequest/Response để tải xuống tệp nhị phân (.exe) từ máy chủ web?
- 11. tải tệp html từ máy chủ web bằng cách sử dụng khoảng cách điện thoại
- 12. Cách tải xuống tệp từ ổ đĩa google bằng cách sử dụng drive api java?
- 13. .exe Tệp bị hỏng khi tải xuống từ máy chủ
- 14. Tải xuống tệp bằng Java
- 15. Tạo liên kết tải xuống tệp trên máy chủ tệp
- 16. Tải xuống tệp bằng cách chuyển URL bằng cách sử dụng mã java
- 17. Cách tải xuống tệp từ SFTP bằng cách sử dụng PHP?
- 18. Cách tạo tệp .BAT để tải xuống tệp từ máy chủ HTTP \ ftp?
- 19. Tải xuống tệp lớn sử dụng grails
- 20. TDownloadURL không thể tải xuống từ HTTPS
- 21. Tải xuống và xóa các tệp từ xa bằng cách sử dụng lftp
- 22. Máy chủ HTTPS Java đơn giản
- 23. Tải xuống tệp bằng cách sử dụng tải xuống một phần (HTTP)
- 24. Tải tệp lên máy chủ tệp bằng cách sử dụng lớp webclient
- 25. Tải xuống tệp CSV bằng cách sử dụng JSF
- 26. Tải xuống tệp CSV bằng cách sử dụng "AJAX"
- 27. Cách tải xuống tệp từ API Drive bằng cách sử dụng tập lệnh Python
- 28. Tải xuống nhiều tệp qua SFTP bằng cách sử dụng Java
- 29. tệp jar để sử dụng rsync để tải lên và tải xuống tệp trên máy chủ linux
- 30. Cách tải xuống tệp từ Google Drive
Bài đăng này (http://stackoverflow.com/questions/1828775/httpclient-and-ssl) có rất nhiều thông tin tốt về thỏa thuận bắt tay SSL và chứng chỉ tự ký. – MarkOfHall