wtyd Posted December 22, 2015 · Report post В общем, делаю примерно так: xml2 < /opt/zapret-info/dump.xml | grep 'url=http' | cut -d'=' -f 2 | sort | uniq > /opt/url-list.txt дальше этот файлик импортируется в SCE. Импортируются почти все URL, кроме строк с русскими буквами. Некоторые люди -- дуры не знают, что на самом деле URL должен только 7-и битные символы содержать, и вставляют в реестр наркоманских сайтов, педофилии, луркморя, торрентов и т.д. запрещённых ресурсов прямо то, что в броузере набирают. Такие урлы SCE импортировать не хочет. Т.е. надо русские сайты пуникодить, а русские ссылки (то, что после доменного имени) преобразовывать в проценты и 7-битные символы. Чем это можно сдлеать в выше приведённой команде ? Желательно на С и через пайп :-). B.t.w. из реестра понятно, какие гос.организации чем увлекаются ;-) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SyJet Posted December 22, 2015 · Report post http://serverfault.com/questions/335073/how-can-i-convert-an-idn-to-punicode-in-bash Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wtyd Posted December 23, 2015 · Report post http://serverfault.com/questions/335073/how-can-i-convert-an-idn-to-punicode-in-bash Так можно только домен в пуникод сконвертировать, а с остальной частью URL как быть ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
joesm Posted December 23, 2015 · Report post Эти урлы еше надо как-то выбрать из списка Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vlad11 Posted December 23, 2015 · Report post Я вижу это как конструкцию на awk. Принимаем список, строки с русскими символами пропускаем через idn. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wtyd Posted December 24, 2015 · Report post Я вижу это как конструкцию на awk. Принимаем список, строки с русскими символами пропускаем через idn. Я где-то находил енкодер в сети, которому даёшь ссылу, а он в ответ выдаёт кодированную ссылку, у которой домен пуникодед (если он интернациональными символами был, иначе домен не трогается), а всё, что после домена, кодируется процентами и 7-битными символами (опять же, если это требуется). Сейчас найти этот енкодер не могу, но там всёравно не указано, как это реализовано. В общем, хотелось бы такое же поведение получить. А что, никто этим вопросом ранее не озадачивался ? Хотя конечно можно подойти формально к этому вопросу, если надзорные органы начнут докапываться за нефильтрацию русских URL. Показать им дамп трафика и там не будет именно той ссылки, что в списке. Броузеры-то всё кодируют сами. В идеале эту проблему должны решать составители реестра. Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DimaM Posted December 24, 2015 · Report post Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем Велосипед из нескольких строчек на питоне #!/usr/bin/env python import unicodedata import urlparse from urllib import quote import sys for url in sys.stdin: scheme, host, path, query, fragment = urlparse.urlsplit(url.strip()) scheme = scheme.lower() fragment = "" host = host.lower() host = host.decode('utf-8').encode('idna') path = quote(path, "~:/?#[]@!$&'()*+,;=") query = "&".join(["=".join([quote(t, "~:/?#[]@!$'()*+,;=") for t in q.split("=", 1)]) for q in query.split("&")]) print urlparse.urlunsplit((scheme, host, path, query, fragment)) Запускать urlfix < before > after Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DimaM Posted December 24, 2015 · Report post Пример работы echo "http://бляхамуха.рф/чтозанах?первый=нах&second=bla-bla-bla#хрень"|./urlfix http://xn--80aab4bg6bld9f.xn--p1ai/%D1%87%D1%82%D0%BE%D0%B7%D0%B0%D0%BD%D0%B0%D1%85?%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9=%D0%BD%D0%B0%D1%85&second=bla-bla-bla Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wtyd Posted December 25, 2015 · Report post Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем Велосипед из нескольких строчек на питоне #!/usr/bin/env python import unicodedata import urlparse from urllib import quote import sys for url in sys.stdin: scheme, host, path, query, fragment = urlparse.urlsplit(url.strip()) scheme = scheme.lower() fragment = "" host = host.lower() host = host.decode('utf-8').encode('idna') path = quote(path, "~:/?#[]@!$&'()*+,;=") query = "&".join(["=".join([quote(t, "~:/?#[]@!$'()*+,;=") for t in q.split("=", 1)]) for q in query.split("&")]) print urlparse.urlunsplit((scheme, host, path, query, fragment)) Запускать urlfix < before > after Спасибо за код. Попробовал, работает быстро, но проблема осталась :-). Я уже не знаю, в чём дело и что надо этой SCE. При загрузке кодированных скриптом url выдаёт такие ошибки: Error - Internal error, Input concatenated Key String are not valid: lurklurk.com:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.co:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Cowboy_shota.jpg:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.co:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Shota_and_loli2.jpg:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.co:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmo.re:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:6adeb2114c98d549a03b28e0166d8fc8.jpg:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmo.re:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Shota_and_loli2.jpg:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmo.re:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.net:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%259A%25D0%25BE%25D0%25BF%25D0%25B8%25D0%25BF%25D0%25B0%25D1%2581%25D1%2582%25D0%25B0:%25D0%259F%25D0%25B5%25D0%25B4%25D0%25BE%25D1%2584%25D0%25B8%25D0%25BB%25D0%25B8%25D1%258F:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%259E%25D0%25B1%25D1%2581%25D1%2583%25D0%25B6%25D0%25B4%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5:%25D0%2593%25D1%2580%25D0%25B8%25D0%25B1%25D1%258B:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%259E%25D0%25B1%25D1%2581%25D1%2583%25D0%25B6%25D0%25B4%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5:%25D0%259A%25D0%25BE%25D0%25BD%25D0%25BE%25D0%25BF%25D0%25BB%25D1%258F:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:6adeb2114c98d549a03b28e0166d8fc8.jpg:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:E999c6a0c8f9caaeba0a2b76d4455748384e5374_loli.jpg:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Moe_77869_sample.jpg:*:* Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Shota_and_loli2.jpg:*:* Почему-то только про луркморе :-). Ну ещё там была ошибка, что длинее чем 900 символов. Например, в реестре есть урл "http://lurkmore.co/%D0%A4%D0%B0%D0%B9%D0%BB:Shota_and_loli2.jpg" прям в таком виде и он почему-то в SCE не лезет. Т.е. этот урл вроде бы и перекодирован правильно, но в чём дело пока не ясно. Вроде бы без ошибок всосался перекодированный url "http://терч.рф/products/kuritelnaya-smes-ak-47#comment_842", это один из тех, которые открывались. Но он всёравно продолжает открываться. Другие обычные url из списка блокируются. Ребусы какие-то. Может быть что-то вообще не так делаю ? Как эти русские сайты блокировать-то ? :-). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SyJet Posted December 25, 2015 · Report post Как эти русские сайты блокировать-то ? :-) - русским же dpi :))) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wtyd Posted December 25, 2015 · Report post Как эти русские сайты блокировать-то ? :-) - русским же dpi :))) SCE не русский, SCE еврейский dpi :-), мы в пролёте с русскими буквами ? Да по-любому надо разобраться как кодировать УРЛ и всё, что-то не так в моих рассуждениях :-). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SyJet Posted December 25, 2015 · Report post Как эти русские сайты блокировать-то ? :-) - русским же dpi :))) SCE не русский, SCE еврейский dpi :-), мы в пролёте с русскими буквами ? Да по-любому надо разобраться как кодировать УРЛ и всё, что-то не так в моих рассуждениях :-). У меня карбон, у друзей скат - оно как-то само эти задачи решает :) оффтоп конечно Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wtyd Posted December 28, 2015 · Report post Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем Велосипед из нескольких строчек на питоне #!/usr/bin/env pythonimport unicodedataimport urlparsefrom urllib import quoteimport sysfor url in sys.stdin: scheme, host, path, query, fragment = urlparse.urlsplit(url.strip()) scheme = scheme.lower() fragment = "" host = host.lower() host = host.decode('utf-8').encode('idna') path = quote(path, "~:/?#[]@!$&'()*+,;=") query = "&".join(["=".join( @!$'()*+,;=") for t in q.split("=", 1)]) for q in query.split("&")]) print urlparse.urlunsplit((scheme, host, path, query, fragment)) Запускать urlfix < before > after Загрузка в SCE не проходит для тех URL, в которых есть ":" . Не подскажете, как модернизировать ваш код, чтобы он заменял двоеточие на "\:" ? SCE ":" считает своим разделителем. Т.е. надо экранировать двоеточия, если они есть в составе пути после доменного имени. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DimaM Posted December 28, 2015 · Report post Последняя строчка print urlparse.urlunsplit((scheme, host, path.replace(":","\:"), query.replace(":","\:"), fragment)) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wtyd Posted December 28, 2015 · Report post Последняя строчка print urlparse.urlunsplit((scheme, host, path.replace(":","\:"), query.replace(":","\:"), fragment)) Большое спасибо. После праздников продолжу тестирование -- сейчас опасно SCE трогать :-) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...