Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > как проверить валидность URL?


Автор: _Y_ 7.4.2009, 16:37
Здравствуйте. Давно не был. 

Вопрос возник: как можно проверить валидность URL? Т.е. хотелось бы програмно послать запрос по HTTP адресу и проанализировать имеется ли такой адрес. 

В развернутом варианте хотелось бы програмно ответить на несколько вопросов: 
  • Имеется ли такой адрес? 
  • Не перенаправлен ли запрос автоматически по другому адресу?
  • Не перенаправлен ли запрос по 404й ошибке?

Что-то я и не придумаю как к этому подобраться.
Спасибо.

Автор: Kangaroo 7.4.2009, 17:05
Цитата(_Y_ @  7.4.2009,  16:37 Найти цитируемый пост)
В развернутом варианте хотелось бы програмно ответить на несколько вопросов: 

    * Имеется ли такой адрес? 
    * Не перенаправлен ли запрос автоматически по другому адресу?
    * Не перенаправлен ли запрос по 404й ошибке?

Для этого можно самому послать запрос и по ответу/ошибке выяснить.

Автор: Samotnik 7.4.2009, 17:19
_Y_, лучше всего отправить асинхронный запрос на сервер, и потом прочитать ответ - он тебе все скажет  smile  Ну и потом действовать по обстоятельствам  smile 

Автор: Vasay 7.4.2009, 17:30
_Y_, 

Откройте сокет, отправьте запрос согласно протоколу http. Прочитайте хидер ответа. Распарсите хидер, на предмет редиректа или ошибок.

Можно и через стандартный java.net.HttpURLConnection сделать.


Можно слегка модифицировать этот код - 
Код

public String getFrom(String urlSrc, String Cookie, String post) {
        URL url = null;
        Socket s = null;
        String Out ="";
        url = new URL(urlSrc);
    
        String host = url.getHost();
        int    port = url.getPort();
        if (port == -1) 
                 port = 80;
        String GET  = url.getQuery();
        String path = url.getPath();
        int post_length = post.length();
        String header;
        if(post.equals(""))
        {
            header = "GET"+ " " + path +"?"+GET+ " HTTP/1.0\r\nAccept: */*\r\nHost: " + host + "\r\nCookie: "+Cookie+"\r\nUser-Agent: "+"MyBrowser"+"\r\nContent-Type: text/html\r\n\r\n";
        }
        else
        {
            header = "POST" + " " + path +"?"+GET+ " HTTP/1.0\r\nAccept: */*\r\nHost: " + host + "\r\nCookie: "+Cookie+"\r\nUser-Agent: "+"MyBrowser"+"\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: "+post_length+"\r\n\r\n"+post;
        }
        
        s = new Socket(host, port);
        
        s.getOutputStream().write(header.getBytes());
          InputStream is = s.getInputStream();
          int Read = 0;
          String line;
            
            
          BufferedReader br = new BufferedReader(
                    new InputStreamReader(is));
            
           
            
            while((line = br.readLine()) !=null)
            {
                Out=Out+line+"\n";
            }
            
            br.close();
            is.close();
            s.close();
  return Out; 
}

Автор: v2v 7.4.2009, 19:27
велосипедисты, а гугл вам на что? На http://java.sun.com/developer/JDCTechTips/2003/tt0422.html большая статья на эту тему.

Автор: _Y_ 9.4.2009, 12:07
Спасибо вроде то, что нужно. Правда надо обрабатывать кучу разных сообщений об ошибках, но без этого, видимо, не обойтись.

v2v, я действительно не эксперт в Гуглении. Эту статью на sun.com я, например, не нашел, а теперь непонятно как мог не найти. Так уж получается что я легко нахожу только то, что и так знаю где лежит smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)