Отправка "Set-Cookie" на HTTP-сервер Python - PullRequest
6 голосов
/ 18 февраля 2010

Как отправить заголовок «Set-Cookie» при работе с BaseHTTPServerRequestHandler и Cookie? BaseCookie и потомки не предоставляют метод для вывода значения, передаваемого в send_header(), а *Cookie.output() не предоставляет разделитель строк HTTP.

Какой Cookie класс я должен использовать? Два выжили в Python3, в чем различия?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Используйте C = http.cookie.SimpleCookie для хранения файлов cookie, а затем C.output() для создания заголовков для него.

Пример здесь

Обработчик запроса имеет атрибут wfile, который является сокетом.

req_handler.send_response(200, 'OK')
req_handler.wfile.write(C.output()) # you may need to .encode() the C.output()
req_handler.end_headers()
#write body...
1 голос
/ 25 января 2019

Я использовал код ниже, который использует SimpleCookie из http.cookies для создания объекта для файла cookie. Затем я добавляю к нему значение и, наконец, добавляю его в список заголовков. отправить (как Set-Cookie поле) с обычным send_header:

    def do_GET(self):

        self.send_response(200)
        self.send_header("Content-type", "text/html")

        cookie = http.cookies.SimpleCookie()
        cookie['a_cookie'] = "Cookie_Value"
        self.send_header("Set-Cookie", cookie.output(header='', sep=''))

        self.end_headers()
        self.wfile.write(bytes(PAGE, 'utf-8'))

Важны параметры для cookie.output:

  • header='' гарантирует, что к создаваемой строке не будет добавлен ни один заголовок (если это не будет сделано, будет создана строка, начинающаяся с Set-Cookie:, что приведет к появлению строк, подобных этой в том же заголовке, поскольку send_header добавит свое).
  • sep='' не вызывает окончательного разделителя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...