Обширная интерпретация URL в Java - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть пользовательский ввод для поля URL. Я хочу, чтобы они могли вводить что угодно от "http://andrewducker.wordpress.com/xmlrpc.php" до" andrewducker.wordpress.com "и иметь возможность в конечном итоге оказаться в одной и той же конечной точке.

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

(ЕСЛИ вам интересно, это потому, что я пишу что-то, что будет публиковать ссылки с Delicious на Wordpress, и мне нужно, чтобы пользователь сообщил мне свой URL-адрес Wordpress, чтобы я мог сделать вызов xmlrpc.)

Edit: я должен прояснить - я всегда хочу, чтобы бит /xmlrpc.php был тем, что находится в конце URL, это стандарт Wordpress, поэтому мне не нужно ничего делать сложное открытие. Мне просто нужно добавить это, если его там нет.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Это две части.

Во-первых, вам нужно добавить "http://" перед URI, если часть схемы не указана, например,

// We could do this with a regex, but its easier to use the built-in parser of the UIR class
URI uri = new URI(uriText);
if (uri.getScheme() == null) {
    uriText = "http://" + uriText;
    uri = new URI(uriText);
}

Вторая частьэто сложнее, потому что это включает в себя перенаправление сервера. Вы не можете знать это, не устанавливая соединение с сервером,
например, "http://site1.com" может быть эквивалентно "http://www.site1.com/index.html"
, но "http://site2.com" может быть эквивалентно "http://site2.com/en/default.aspx"

Ваша лучшая ставка, вероятно, состоит в том, чтобы сделать HttpUrlConnection и проверить ответ 301, а если вы его получите, используйте URI из этого.

0 голосов
/ 24 ноября 2011

Используйте сопоставление с регулярным выражением, чтобы узнать часть хоста.Например, если вы сопоставляете это регулярное выражение «(https?: //)? ([^ / \?] +)», То хост является второй группой совпадений.

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