Форум сайта python.su
Windows XP SP2, ActivePython 2.5.
import urllib
f = urllib.urlopen("http://***/***.php")
Офлайн
Используй urllib2.urlopen, там возможно задать header'ы.
Пример из стандартной доки:
import urllib2 req = urllib2.Request('http://www.example.com/') req.add_header('Referer', 'http://www.python.org/') r = urllib2.urlopen(req)
import urllib2 opener = urllib2.build_opener() opener.addheaders = [('User-agent', 'Mozilla/5.0')] opener.open('http://www.example.com/')
Офлайн
Для работы с куки есть HTTPCookieProcessor.
Вот ряд примеров:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440574
http://wwwsearch.sourceforge.net/ClientCookie/src/README-0_3_5b.html
Офлайн
Спасибо.
Насколько я понял, есть вроде два способа решения проблемы: использовать модуль “ClientCookie” (v0.3.5 beta от 2003-05-27), или использовать модуль “cookielib”, который есть в поставке Питона от ActiveState. Второй способ мне кажется лучше, т.к. не требует установки дополнительных вещей. Если я понял неверно, разъясните, please.
И я не понял, как установить куки, используя cookielib. В конструкторе urllib2.Request есть два последних параметра, которые вроде надо использовать для установки куков. Как правильно заполнить эти параметры, я не понял.
Офлайн
# -*- coding: cp1251 -*- import cookielib import urllib import urllib2 import time import string # получаем дату 3 дня назад от текщей: date = time.localtime(time.time() - 60*60*24*3) # преобразуем дату в формат ГГГГ-ММ-ДД: date = str(date[0]) + "-" + string.zfill(str(date[1]), 2) + "-" + string.zfill(str(date[2]), 2) # задаём параметры для передачи открываемой страничке методом POST: params = urllib.urlencode({'posts_less' : 1, 'registered_before' : date, 'order_by': 'registered'}) # создаём объект запроса: req = urllib2.Request('http://forum.***/admin_users.php?action=find_user', params) # ЗДЕСЬ НАДО КАК-ТО ИСПОЛЬЗОВАТЬ КУКИ? # ... # получаем файловый объект странички: f = urllib2.urlopen(req) print unicode(f.read(), 'cp1251')
Офлайн
Проботайте хорошенько протокол HTTP… Куки передаются как заголовки запроса, => задавать их примерно так:
# ЗДЕСЬ НАДО КАК-ТО ИСПОЛЬЗОВАТЬ КУКИ? req.add_header("Cookie", "param1=val1; param2=val2; param3=123") # получаем файловый объект странички:
Офлайн
Все ники заняты
cookielib позволяет автоматизировать работу с cookie. Если при запросе страницы выдается куки, то он будет сохранен и отправлен при следующем запросе. Также он позволяет использовать куки от браузера. Если требуется сразу передать куки(не получая его заранее), то можно воспользоваться примером xonix в предыдущем посте или использовать метод set_cookie класса CookieJar(ИМХО второй вариант сложнее, но удобнее, тк при следующих запросах куки будет отправляться автоматически).
Офлайн
Спасибо, статью про куки перечитал (я её и раньше видел). Однако, там всё описывается не в приложении к Питону, поэтому всё равно есть вопросы.
Да, куки наверное требуется передать сразу (не получая их заранее). Только что именно передавать, чтобы воспользоваться примером от xonix? Открываемая страничка, кстати - административная часть форума PunBB :). Сами куки в браузере (IE) хранятся в виде текстовых файлов, формат которых непонятен (там внутри белиберда). Соответственно, что именно надо написать в качестве имён параметров и их значений, не ясно. Я догадываюсь, что это должны быть как минимум имя пользователя и хэш пароля, только где их взять? Есть ли способ выяснить состав куков и их значения?
Или лучше будет открыть вначале страничку авторизации, и послать ей методом POST имя пользователя и пароль (они мне конечно известны)? Как тогда в этом случае получить от сервера заголовки с куками, чтобы применить их потом для открытия уже нужной мне странички? Please, придумайте примеры кода для моего случая…
Цель всего действа - автоматизировать на клиенте некоторые действия со страничками, которые обычно выполняются интерактивно.
P.S. Извините за то, что прошу так разжёвывать - я новичок в Питоне, да ещё и английский практически не знаю, изголяюсь с ПРОМТ'ом :(.
Отредактировано (Апрель 9, 2007 13:56:34)
Офлайн
Все ники занятыПосмотри значения кукисов в firefox.
Я догадываюсь, что это должны быть как минимум имя пользователя и хэш пароля, только где их взять? Есть ли способ выяснить состав куков и их значения?
Офлайн
Спасибо, передать куки так, как советовал xonix, получилось. Действительно, в куках один параметр “pun_bb” - похоже на id сессии. Я просто открыл текстовый файл куки в кеше IE и скопировал нечеловеческий идентификатор в свой код - всё заработало.
Однако, насколько я понимаю, если я интерактивно сделаю “выйти-войти”, этот идентификатор изменится, т.к. будет новая сессия. Следовательно, мой скрипт станет негодным.
Всё же очень прошу примера (буквально несколько строк), как получить от сервера заголовки с куками.
Тогда я открою вначале урл со страничкой авторизации, пошлю ей методом POST имя пользователя и пароль, и получу нужные мне куки для открытия в скрипте других страничек.
Офлайн