Я работаю с urllib2
и пытается извлечь заголовки в печатной форме из объекта Response
.
В настоящее время я печатаю str(response.info())
, однако то, что напечатано, само является строкой Python (по крайней мере, для моего понимания).
(Pdb) p str(response.info())
'Date: Tue, 23 Feb 2010 03:12:26 GMT\r\nServer: Apache\r\nVary: Accept-Encoding,User-Agent\r\nContent-Encoding: gzip\r\nContent-Length: 9045\r\nConnection: close\r\nContent-Type: text/html; charset=ISO-8859-1\r\n'
Мне нужно превратить эту строку в "фактическую" строку, например, путем оценки или чего-то подобного. Лучшее теоретическое решение, которое я нашел, это использовать:
s = str(response.info())
print s.decode("string_escape")
Но это не работает. Дальнейшее добавление к путанице заключается в том, как обрабатывать кавычки внутри строки, вызывающие eval(s)
и str(s)
тоже не работают.
Есть ли лучший способ извлечь исходные заголовки в ответе без кавычек или метод для декодирования строки s
, как указано выше?
str(info())
дает нормальную строку:
>>> import urllib2
>>> f = urllib2.urlopen('http://tejp.de')
>>> print str(f.info())
Connection: close
Vary: Accept-Encoding
Content-Type: text/html
Accept-Ranges: bytes
ETag: "-807357257"
Last-Modified: Wed, 01 Jul 2009 10:05:34 GMT
Content-Length: 285
Date: Tue, 23 Feb 2010 03:24:10 GMT
Server: lighttpd/1.4.19
Это только команда отладки p
, которая печатает строку в экранированной форме.
Из pdb это должно работать:
print str(response.info())
Не уверен, что это отвечает на ваш вопрос.
p
печатает строку синтаксиса Python, тогда как print
выдает многострочный вывод без видимых выходов.
response.info()
возвращает a httplib.HTTPMessage
, который ведет себя как отображение:
info = response.info()
for k, v in info.items():
print '%s: %s' % (k, v)
Короче говоря, вы делаете это неправильно.