Справка по Python Regex (файлы cookie httplib2) - PullRequest
0 голосов
/ 19 февраля 2010

Возникла та же проблема, что и у автора этого вопроса: httplib2, как установить более одного файла cookie?

Печенье выглядит так ..

PHPSESSID=8527b5532b6018aec4159d81f69765bd; path=/; expires=Fri, 19-Feb-2010 13:52:51 GMT, id=1578; expires=Mon, 22-Feb-2010 13:37:51 GMT, password=123456; expires=Mon, 22-Feb-2010 13:37:51 GMT, sid=8527b5532b6018aec4159d81f69765bd

Обратите внимание, что для разделения файлов cookie используются запятые и точки с запятой, но запятые также используются в самом файле cookie.

Это слишком сложно для меня, чтобы написать регулярное выражение, чтобы разделить их должным образом, было бы очень признательно, если кто-то хочет дать ему шанс!

Ответы [ 2 ]

1 голос
/ 19 февраля 2010

Обратите внимание, как он использует запятые и точки с запятой для разделения файлов cookie, но запятые также используются в самом файле cookie.

Как указывалось, неоднозначные запятые делают строку неразборчивой с помощью регулярных выражений или любого другого инструмента. Откуда эта строка?

В качестве значения заголовка Set-Cookie: оно просто будет полностью недействительным и не будет работать ни в одном браузере. Браузеры установят PHPSESSID в качестве cookie-файла сеанса (поскольку формат даты истекает недопустимо с лишней запятой) и игнорируют остальные. Необходимо установить несколько файлов cookie с несколькими заголовками Set-Cookie, а не объединять их в один.

Редактировать: ОК, похоже, что httplib2 обрабатывает данные ответа HTTP, используя пакет stdlib email для анализа заголовков. В электронной почте семейство стандартов RFC822 требует, чтобы несколько заголовков с одинаковыми именами (например, To: адреса) были эквивалентны одному заголовку со значениями, объединенными запятыми.

Однако ответы HTTP явно не стандарт семейства RFC822; совершенно неуместно обращаться с ними таким образом. Может показаться, что, используя email для анализа HTTP-ответов, httplib2 не смог правильно обработать любой многократно используемый заголовок, и заголовок Set-Cookie очень часто используется таким образом. По этой причине я считаю httplib2 принципиально сломанным и советую не использовать его.

1 голос
/ 19 февраля 2010

Вы пробовали cookielib / http.cookiejar?


Если вы интерпретируете куки как это

PHPSESSID=8527b5532b6018aec4159d81f69765bd;
path=/;
expires=Fri, 19-Feb-2010 13:52:51 GMT, id=1578;
expires=Mon, 22-Feb-2010 13:37:51 GMT, password=123456; 
expires=Mon, 22-Feb-2010 13:37:51 GMT, sid=8527b5532b6018aec4159d81f69765bd

Тогда только точка с запятой является истинным разделителем, а разделитель запятой - только из-за даты окончания срока действия, предшествующей ему.

Если вас не интересует дата окончания срока действия, вы можете использовать 1 регулярное выражение, чтобы отфильтровать дату окончания срока действия, например,

s/expires=[^,]+,[^,]+, //g

затем разделите всю строку на ; и проанализируйте их как key=value пар.

...