Jump to content
Калькуляторы

Загрузка URL в SCE как перекодировать URL'ы в 7-bit и русские сайты в punycode ?

В общем, делаю примерно так:

 

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. из реестра понятно, какие гос.организации чем увлекаются ;-)

Share this post


Link to post
Share on other sites

 

Так можно только домен в пуникод сконвертировать, а с остальной частью URL как быть ?

Share this post


Link to post
Share on other sites

Я вижу это как конструкцию на awk.

Принимаем список, строки с русскими символами пропускаем через idn.

Share this post


Link to post
Share on other sites

Я вижу это как конструкцию на awk.

Принимаем список, строки с русскими символами пропускаем через idn.

 

Я где-то находил енкодер в сети, которому даёшь ссылу, а он в ответ выдаёт кодированную ссылку, у которой домен пуникодед (если он интернациональными символами был, иначе домен не трогается), а всё, что после домена, кодируется процентами и 7-битными символами (опять же, если это требуется). Сейчас найти этот енкодер не могу, но там всёравно не указано, как это реализовано.

 

В общем, хотелось бы такое же поведение получить.

 

А что, никто этим вопросом ранее не озадачивался ? Хотя конечно можно подойти формально к этому вопросу, если надзорные органы начнут докапываться за нефильтрацию русских URL. Показать им дамп трафика и там не будет именно той ссылки, что в списке. Броузеры-то всё кодируют сами.

 

В идеале эту проблему должны решать составители реестра. Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем.

Share this post


Link to post
Share on other sites

Понапихали туда всякой чуши, а мы тут велосипеды на 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

Share this post


Link to post
Share on other sites

Понапихали туда всякой чуши, а мы тут велосипеды на 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 из списка блокируются.

 

Ребусы какие-то.

 

Может быть что-то вообще не так делаю ? Как эти русские сайты блокировать-то ? :-).

Share this post


Link to post
Share on other sites

Как эти русские сайты блокировать-то ? :-) - русским же dpi :)))

 

SCE не русский, SCE еврейский dpi :-), мы в пролёте с русскими буквами ? Да по-любому надо разобраться как кодировать УРЛ и всё, что-то не так в моих рассуждениях :-).

Share this post


Link to post
Share on other sites

Как эти русские сайты блокировать-то ? :-) - русским же dpi :)))

 

SCE не русский, SCE еврейский dpi :-), мы в пролёте с русскими буквами ? Да по-любому надо разобраться как кодировать УРЛ и всё, что-то не так в моих рассуждениях :-).

У меня карбон, у друзей скат - оно как-то само эти задачи решает :) оффтоп конечно

Share this post


Link to post
Share on other sites

Понапихали туда всякой чуши, а мы тут велосипеды на 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 ":" считает своим разделителем. Т.е. надо экранировать двоеточия, если они есть в составе пути после доменного имени.

Share this post


Link to post
Share on other sites

Последняя строчка

print urlparse.urlunsplit((scheme, host, path.replace(":","\:"), query.replace(":","\:"), fragment))

 

Большое спасибо. После праздников продолжу тестирование -- сейчас опасно SCE трогать :-)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.