Перейти к содержимому
Калькуляторы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Эти урлы еше надо как-то выбрать из списка

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.