Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » urllib не выполняет запрос с кириллицей в url [RSS Feed]

#1 Март 30, 2011 11:37:30

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

файл в utf-8

URL = 'http://google.ru/search?as_epq=&as_oq=&as_eq=&hl=ru&tbo=1&num=100&lr=&cr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=&as_rights=&safe=images&btnG=Поиск+в+Google&start'
получаю:
    
File "/home/user/python3/as_http.py", line 222, in _exec
response = urllib.request.urlopen(request)
File "/usr/local/lib/python3.2/urllib/request.py", line 138, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/lib/python3.2/urllib/request.py", line 366, in open
response = self._open(req, data)
File "/usr/local/lib/python3.2/urllib/request.py", line 384, in _open
'_open', req)
File "/usr/local/lib/python3.2/urllib/request.py", line 344, in _call_chain
result = func(*args)
File "/usr/local/lib/python3.2/urllib/request.py", line 1140, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "/usr/local/lib/python3.2/urllib/request.py", line 1122, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "/usr/local/lib/python3.2/http/client.py", line 964, in request
self._send_request(method, url, body, headers)
File "/usr/local/lib/python3.2/http/client.py", line 992, in _send_request
self.putrequest(method, url, **skips)
File "/usr/local/lib/python3.2/http/client.py", line 856, in putrequest
self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 157-161: ordinal not in range(128)
если убрать из урла ‘Поиск+в’ - все работает нормально
почему так и как это исправить?



Офлайн

#2 Март 30, 2011 12:03:08

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

Нужно произвести эскейпинг урла, чтобы там были только ascii символы.



Офлайн

#3 Март 30, 2011 12:27:18

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

А как тогда, например, открыть http://президент.рф/ ? Похоже, что в urlllib кривизна - там не должно быть только ascii.



Офлайн

#4 Март 30, 2011 12:44:45

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

agalen
А как тогда, например, открыть http://президент.рф/  ? Похоже, что в urlllib кривизна - там не должно быть только ascii.
президент.рф == xn–d1abbgf6aiiy.xn–p1ai
Внезапно!



Отредактировано (Март 30, 2011 12:45:22)

Офлайн

#5 Март 30, 2011 14:06:49

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

regall
президент.рф == xn–d1abbgf6aiiy.xn–p1ai
Это преобразование и должен делать urllib внутри себя.
Если, например, дали URL в таком виде "http://президент.рф/Документы", то будь добр обработай. Браузеры ведь такое берут.



Офлайн

#6 Март 30, 2011 14:13:21

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

urllib не выполняет запрос с кириллицей в url

Звучит разумно, займитесь этим.



Офлайн

#7 Март 30, 2011 14:16:26

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

agalen
Это преобразование и должен делать urllib внутри себя.
Почему вы так решили? Зачем urllib знать дополнительно про кодировки, про punycode и т.п.
Низкий уровень библиотеки дает возможность авторам её клиентского кода делать всё максимально гибко в зависимости от требований. Тем более это не будет зависит от версий питона и обновленности его стандартной библиотеки.



Офлайн

#8 Март 30, 2011 16:26:07

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

Ну, urllib может и не должен, но было бы неполхо, если бы умел. Все-таки это не самый низкий уровень - здесь есть функции формирования и разбора url, другие вспомогательные. Низкий уровень - это когда отдал bytes, получил bytes - с кодировками возись сам.

На ISSUE TRACKER похожие вопросы обсуждались (http://bugs.python.org/issue3991), но пока вопрос открыт.



Офлайн

#9 Март 30, 2011 23:09:40

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

urllib не выполняет запрос с кириллицей в url

Кажется, дело заглохло. К тому же в приведенной ссылке настораживает ее древность, отсутствие тестов и ни одного заинтересовавшегося разработчика из core development team. У двух других issues дела обстоят не намного лучше.
Как по мне - налицо явная недоработка, которая рано или поздно будет исправлена. Если этим заняться вплотную - то есть шанс починить до выхода 3.3.



Офлайн

#10 Март 31, 2011 13:29:11

DcDr
От:
Зарегистрирован: 2011-01-09
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib не выполняет запрос с кириллицей в url

Андрей Светлов
Кажется, дело заглохло. К тому же в приведенной ссылке настораживает ее древность, отсутствие тестов и ни одного заинтересовавшегося разработчика из core development team.
Исходя из этого можно предположить, что подавляющее число питонеров - пользуются латиницей.



Офлайн

  • Начало
  • » Web
  • » urllib не выполняет запрос с кириллицей в url[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version