Java: Тип файла `url.openStream ()` - PullRequest
2 голосов
/ 19 октября 2010

Я написал этот метод для загрузки веб-страницы с указанным URL.Он предназначен для загрузки только HTML.Если я хочу сделать проверку ошибок и разрешить только HTML, как мне это сделать?

public static String download(URL url) throws IOException {
    InputStream is = url.openStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String page = "";
    String line;    
    while((line = reader.readLine()) != null){
        page = page + line;
    }
    return page;
}

Первоначально я планировал сделать это:

String file = url.getFile();
if(file.subString(file.indexOf("."),file.length()-1).equalsIgnoreCase("HTML")){
    // do method

Однако URL: http://www.smu.com возвращает "" для url.getFile().У кого-нибудь есть предложения?

Ответы [ 3 ]

4 голосов
/ 19 октября 2010

Чтобы проверить, получаете ли вы html, вы можете использовать URL.openConnection (), чтобы получить UrlConnection, а затем вызвать getContentType (), который должен вернуть «text / html» для страницы HTML. Затем вы можете использовать метод getInputStream () в UrlConnection () в качестве замены вместо url.openStream ();

Если вы действительно хотите проверить, что контент, отправляемый вам сервером, представляет собой HTML, вам нужно найти библиотеку проверки HTML. Извините, я не знаю, извините.

Следует учесть, что, возможно, именно поэтому www.smu.com не возвращает данные, это то, что несколько веб-сайтов будут обслуживать разные данные в зависимости от строки User-Agent, отправляемой по HTTP-соединению. Вам может потребоваться изменить это в вашем UrlConnection с помощью: UrlConnection.addRequestProperty ("User-Agent", ...); См. Дополнительную информацию здесь: Настройка пользовательского агента Java URLConnection

3 голосов
/ 19 октября 2010

Если вы хотите проверить содержимое за пределами проверки заголовка Content-Type, то вы можете использовать HTML-анализатор, такой как (ошибочно названный!) JTidy .

2 голосов
/ 19 октября 2010

"http://www.smu.com" отправляет вам данные в" http://www.smu.com/index.html". Это (обычное) поведение веб-серверов при запросе "/" (веб-сервер также может теоретически перенаправить сервер с 302 или еще чем-нибудь).Проверка того, заканчивается ли URL-адрес в «.html», таким образом, совершенно глупа (не говоря уже о том, что это может быть «.php», «.asp» или что-то в этом роде).

Однако Хороший веб-сервер, обслуживающий HTML, должен возвращать Content-Type заголовок "text / html".(Это, конечно, при условии, что он возвращает HTML, а не XHTML, XML или еще много чего, и веб-сервер не сломан).

Возможно, вы захотите использовать URLConnection .Вот пример URLConnection с заголовками .

Как я определил старший бит?

Я запустил curl -I <a href="http://www.smu.com" rel="nofollow">http://www.smu.com</a> (и с ../index.html)и сравнил результаты.Они выглядят так:

HTTP/1.1 200 OK
Date: Tue, 19 Oct 2010 18:01:39 GMT
Server: Apache
Last-Modified: Wed, 27 Jan 2010 20:27:52 GMT
Accept-Ranges: bytes
Content-Length: 2993
Content-Type: text/html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...