понедельник, 23 июля 2007 г.

Сага о exceptions.UnicodeDecodeError

Хотелось написать скриптик, который автоматизирует некий веб-процесс (во как загнул). Для этого был использован модуль httplib.
Алгоритм действии таков:
1. Стучим GET'ом на сервер
2. Забираем хидеры + тело ответа
3. Парсим и то и другое
4. генерим новый GET (или POST)
Вот такой простой алгоритм. Проблема появилось на 3 пункте: «Парсим и то и другое». При попытке вывести на экран тело ответа выдавалось исключение: exceptions.UnicodeDecodeError, вот каким путём удалось обойти это (полный скрипт):

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Author LMZ
# Purpose Omitted ;)

import cgi
import cgitb; cgitb.enable()

import sys
import httplib

print "Content-Type: text/html" # HTML is following
print

host = 'www.ruhost.ru'
h = httplib.HTTP(host)
h.putrequest('GET', '/')
h.putheader('Host', host)
#h.putheader('User-agent', 'python-httplib')
h.endheaders()

returncode, returnmsg, headers = h.getreply()
if returncode == 200: #OK
   strFile = h.getfile().read().decode('cp1251')
   print type(strFile)# как ни странно, тут печатается: <type 'unicode'>
   print strFile.encode('utf-8')
else:
   print "Error, return code %s" % returncode

#END

вот такое вот нелогичное, имхо, решение

Комментариев нет:

[Кодер]::Лого :) - просто как всё гениальное.