Как я могу проверить, указывают ли два разных URL на один и тот же ресурс?

Допустим, у меня есть веб-сайт, размещенный на компьютере с именем «linux», и он является частью двух разных сетей с адресами 192.168.1.1 и 10.1.1.1. При локальной работе с «linux» я могу получить доступ к этому веб-сайту через следующие URL-адреса:

http://192.168.1.1/ http://10.1.1.1/ http://linux/ http://localhost/ http://127.0.0.1/

Работая на другой машине в сети «10.1.1.0/24», я могу использовать следующее:

http://10.1.1.1/ http://linux/

Но на «192.168.1.0/24» я могу использовать только:

http://192.168.1.1/ http://linux/

Я разрабатываю приложение, которое сравнивает URL-адреса, и в контексте этого приложения два URL-адреса равны, если они указывают на один и тот же ресурс.

Есть ли быстрый способ сделать такое сравнение, используя класс URI в С#?


person Thiago de Arruda    schedule 29.06.2010    source источник


Ответы (2)


Класс URI никоим образом не поможет вам; он может только определить, являются ли два URI одним и тем же URI, и они являются одним и тем же URI только в том случае, если они имеют одно и то же имя сервера / IP-адрес.

Лучший вариант — загрузить ресурс с обоих URL-адресов и посмотреть, является ли он одним и тем же ресурсом, проверив равенство и предположив, что два ресурса являются одним и тем же ресурсом, если они представляют собой одинаковую последовательность битов.

Это не вариант для меня, стоимость производительности может быть слишком высокой. Я надеялся на что-то, что могло бы соответствовать части URI «адрес хоста», тогда все, что оставалось для сравнения, — это относительный путь и порт... — Тиадо де Арруда

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

Вам нужно будет иметь какое-то сопоставление хостов с различными псевдонимами этих хостов и запрашивать их самостоятельно. Свойство URI.Host получит имя узла URI, о котором идет речь, для вас, но вам придется перевести его самостоятельно. Ничто в рамках не сможет сделать это за вас.

person Randolpho    schedule 29.06.2010
comment
Это не вариант для меня, стоимость производительности может быть слишком большой. Я надеялся на что-то, что могло бы соответствовать части URI «адрес хоста», тогда все, что осталось для сравнения, - это относительный путь и порт... - person Thiago de Arruda; 29.06.2010

Вы можете сделать это с помощью красивого супа, используя python (очистите страницу и проверьте, совпадают ли несколько элементов), однако это будет медленнее, поскольку вам нужно будет извлекать фактические веб-данные.

person Jessica Shu    schedule 10.06.2014