Есть ли URL действующий генератор для Java? - PullRequest
1 голос
/ 10 мая 2011

Мне нужно создать действительные URL.

Пример: я передаю URL: google.com. Генератор возвращает http://google.com/.

Некоторые браузеры делают это. Я пытался сделать свой собственный алгоритм, но не удалось.

Другой пример: www.yadayadayada.com/../test возвращает http://www.yadayadayada.com/test/

public String generateValidURL(String url) {
    int pos = 0;        
    try {
        url = url.trim();
        url = url.replaceAll(" ", "%20");
        if (url.startsWith("http") && (!url.substring(4).startsWith("://"))) {
            for (int i = 4; i < 7; i++) {
                if ((url.charAt(i) == '/') || (url.charAt(i) == ':')) {
                    pos = i;
                }
            }
            url = url.substring(pos + 1);
        }
        if(url.startsWith("https")){
            url = url.replace("https", "http");
        }
        if (!url.startsWith("http")) {
            url = "http://" + url;
        }
        if (!url.substring(7).contains("/")) {
            url += "/";
        }
        url = url.replace(",", ".");
        url = url.replace("../", "/");
        url = url.substring(0, 7) + url.substring(7).replace("//", "/");            
        return url;
    } catch (Exception e) {
        System.out.println("Error generating valid URL : " + e);
        return null;
    }
}

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Обновление: теперь это более понятно, чего вы хотите достичь - я не думаю, что для этого есть утилита. Ваш метод должен сделать, просто отладить его.

Оригинальный ответ:

URL url = new URL("http", domain, "/");
String output = url.toExternalForm();

На самом деле, вы можете использовать класс URI вместо:

URI uri = new URI("http", "google.com", "/test", null);

Вы можете использовать uri.resolve("../relativePath"), и это будет решено. Но имейте в виду, что ваш пример с /../test == /test неверен (вы должны обработать этот случай вручную)

1 голос
/ 09 марта 2018

MockNeat имеет метод, который делает именно это - он генерирует действительные URL-адреса на основе набора предопределенных ограничений.

Например:

MockNeat m = MockNeat.threadLocal();

m.urls()
  .scheme(HTTP) // all the URLS have a HTTP scheme
//.auth() -- can include auth information in the URL
  .domain(POPULAR) // only popular domain names can be used 
  .host(ADVERB_VERB) 
  .ports(80, 8080, 8090) // only the following ports can be used
  .list(10) 
  .consume(System.out::println);

Будет генерироватьсписок из 10 URL-адресов, которые выглядят следующим образом:

[http://www.tenthlyassays.net:8090, http://www.aflamecurr.io:8080, http://www.thirdlygirth.org:8080, http://www.foreprobates.net:8090, http://www.pokilyrile.org:80, http://www.cheerfullyapprizings.net:8090, http://www.whistlinglyunsettles.info:80, http://www.gratistrichinized.io:8080, http://www.sternwardssnuffle.gov:8090, http://www.yesterdaynix.edu:8090]

Документацию можно найти в вики проекта.

Отказ от ответственности: я являюсь одним из разработчиков этой библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...