2012-06-26 28 views
6

tôi có một loạt các chuỗi (URL) dưới các hình thức khác nhau như:Sự khác nhau giữa các phương thức getHost và getAuthority trong lớp URL trong Java là gì?

  1. http://domain name.anything/anypath
  2. https://dmain name.anything/anypath
  3. http://www.domain name.anything/anypath
  4. https://www.dmain name.anything/anypath

Các chuỗi được lưu trong tập tin CSV. Tôi cần phải phân tích cú pháp mọi URL để chỉ nhận tên miền, domain name.anything. tức là phần sau . đầu tiên và trước / đầu tiên.

Tôi đã tách các chuỗi bằng cách sử dụng phương thức split, sau đó chuyển đổi từng chuỗi thành URL, sau đó sử dụng hàm toAuthority để chỉ nhận tên miền. Vấn đề là, toAuthoritytoHost đang làm cùng một công việc cho tôi, chúng bao gồm www. mà tôi không muốn. Mặc dù, trong số tutorial từ Oracle, có vẻ như toAuthority phải trả lại tên miền mà không cần www..

Làm cách nào để trích xuất phần tên miền mà không cần www. URL?

+0

'getHost' được tên máy và' getAuthority' được quyền –

Trả lời

13

Sự khác biệt giữa phương thức getHost và getAuthority trong lớp URL là gì?

Để thực sự hiểu điều này, bạn nên đọc URI specification - RFC 2396.

Câu trả lời ngắn gọn là thành phần ủy quyền bao gồm thành phần máy chủ cùng với số cổng, tên người dùng và mật khẩu tùy chọn ... tùy thuộc vào lược đồ URL được sử dụng.


Làm thế nào tôi có thể trích xuất các phần tên miền duy nhất mà không có "www." của URL ??

Bạn gọi getHost(), kiểm tra xem nó có bắt đầu bằng chuỗi "www." và nếu bạn xóa nó.

Nhưng trước khi bạn bắt đầu thực hiện những việc như vậy, bạn cần hiểu rằng việc xóa "www". có thể cung cấp cho bạn một URL không hoạt động hoặc giải quyết một tài liệu hoặc dịch vụ khác với URL mà URL gốc giải quyết. Đó là một ý tưởng tồi để vô tình dọn dẹp các URL ... trừ khi bạn có kiến ​​thức chi tiết về cách các trang web được đề cập được tổ chức.

Quy ước "foo.com" và "www.foo.com" là cùng một địa điểm là chỉ một quy ước và rất nhiều trang web không triển khai nó. Đang xóa "www". sẽ là một ý tưởng tồi vì có trách nhiệm chuyển các URL có thể phân giải thành các URL không giải quyết được.

+0

Thêm đặc tả RFC và foo.com/" www.foo.com "làm rõ là một liên lạc tốt đẹp. –

1

Có vẻ như bạn đang tìm cách trích xuất miền cấp hai hiệu quả. Điều này rất dễ dàng để trích xuất cho một số lượng nhỏ các hậu tố công khai như .com, .net, .org bằng cách trước tiên nhận tên máy chủ, như Stephen mô tả và trích xuất chuỗi con bắt đầu bằng khoảng thời gian thứ hai từ cuối. Nhiều hậu tố công cộng như co.uk sẽ phá vỡ thuật toán đơn giản này.Bạn có thể tìm thấy danh sách đầy đủ các hậu tố công khai tại đây: http://publicsuffix.org/ Sau đó, bạn có thể sử dụng các hậu tố công khai trong bảng tra cứu để lấy tên miền cấp hai hiệu quả.

1

bạn có thể sử dụng google ổi để có được những tên miền từ tên máy chủ:

InternetDomainName.from(hostname).topPrivateDomain().toString() 
Các vấn đề liên quan