Latest posts on urllib: как залогиниться, используя куки? topichttps://python.su/forum/topic/655/2007-04-11T03:07:42+03:00Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-11T03:07:42+03:00xonix4602Всегда пожалуйста ;-)
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-10T21:36:42+03:00Все ники заняты4598Блин, там на html-форме ещё два input'а типа “hidden” было :). Когда я их послал, всё получилось.<br/>xonix, slivlen, большое спасибо, вопрос закрыт.
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-10T20:05:49+03:00Все ники заняты4597<div class="code"><pre><span class="c"># -*- coding: cp1251 -*-</span>
<span class="kn">import</span> <span class="nn">urllib</span>
<span class="kn">import</span> <span class="nn">urllib2</span>
<span class="n">params</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">urlencode</span><span class="p">({</span><span class="s">'req_username'</span> <span class="p">:</span> <span class="s">'myName'</span><span class="p">,</span>
<span class="s">'req_password'</span> <span class="p">:</span> <span class="s">'myPass'</span><span class="p">,</span>
<span class="s">'login'</span> <span class="p">:</span> <span class="s">'Зайти'</span><span class="p">})</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="s">'http://forum.***/login.php?action=in'</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
<span class="k">print</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s">'Connection'</span><span class="p">],</span> <span class="s">'cp1251'</span><span class="p">)</span>
<span class="k">print</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s">'Set-Cookie'</span><span class="p">],</span> <span class="s">'cp1251'</span><span class="p">)</span>
<span class="k">print</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s">'Location'</span><span class="p">],</span> <span class="s">'cp1251'</span><span class="p">)</span>
</pre></div>На ‘Connection’ говорит ‘close’. На ‘Set-Cookie’ говорит <strong>KeyError: ‘set-cookie’</strong>. На ‘Location’ тоже говорит <strong>KeyError: ‘location’</strong>, хотя интерактивно после залогинивания происходит редирект. Я ничего не понимаю… :(
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-10T11:57:04+03:00Все ники заняты4579Спасибо, передать куки так, как советовал xonix, получилось. Действительно, в куках один параметр “pun_bb” - похоже на id сессии. Я просто открыл текстовый файл куки в кеше IE и скопировал нечеловеческий идентификатор в свой код - всё заработало.<br/>Однако, насколько я понимаю, если я интерактивно сделаю “выйти-войти”, этот идентификатор изменится, т.к. будет новая сессия. Следовательно, мой скрипт станет негодным.<br/>Всё же очень прошу примера (буквально несколько строк), как получить от сервера заголовки с куками.<br/>Тогда я открою вначале урл со страничкой авторизации, пошлю ей методом POST имя пользователя и пароль, и получу нужные мне куки для открытия в скрипте других страничек.
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-09T14:35:13+03:00slivlen4559<blockquote><em>Все ники заняты</em><br/>Я догадываюсь, что это должны быть как минимум имя пользователя и хэш пароля, только где их взять? Есть ли способ выяснить состав куков и их значения?</blockquote>Посмотри значения кукисов в firefox.<br/>P.S. А зачем в кукисах хеш пароля хранить? Там id сессии скорее всего.
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-09T13:50:05+03:00Все ники заняты4558Спасибо, статью про куки перечитал (я её и раньше видел). Однако, там всё описывается не в приложении к Питону, поэтому всё равно есть вопросы.<br/>Да, куки наверное требуется передать сразу (не получая их заранее). Только <strong>что именно</strong> передавать, чтобы воспользоваться примером от xonix? Открываемая страничка, кстати - административная часть форума PunBB :). Сами куки в браузере (IE) хранятся в виде текстовых файлов, формат которых непонятен (там внутри белиберда). Соответственно, что именно надо написать в качестве имён параметров и их значений, не ясно. Я догадываюсь, что это должны быть как минимум имя пользователя и хэш пароля, только где их взять? Есть ли способ выяснить состав куков и их значения?<br/>Или лучше будет открыть вначале страничку авторизации, и послать ей методом POST имя пользователя и пароль (они мне конечно известны)? Как тогда в этом случае получить от сервера заголовки с куками, чтобы применить их потом для открытия уже нужной мне странички? Please, придумайте примеры кода для моего случая…<br/>Цель всего действа - автоматизировать на клиенте некоторые действия со страничками, которые обычно выполняются интерактивно.<br/>P.S. Извините за то, что прошу так разжёвывать - я новичок в Питоне, да ещё и английский практически не знаю, изголяюсь с ПРОМТ'ом :(.
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-09T08:40:19+03:00slivlen4554<strong>Все ники заняты</strong><br/>cookielib позволяет автоматизировать работу с cookie. Если при запросе страницы выдается куки, то он будет сохранен и отправлен при следующем запросе. Также он позволяет использовать куки от браузера. Если требуется сразу передать куки(не получая его заранее), то можно воспользоваться примером <strong>xonix</strong> в предыдущем посте или использовать метод set_cookie класса <a href="http://www.python.org/doc/2.4.1/lib/node534.html">CookieJar</a>(ИМХО второй вариант сложнее, но удобнее, тк при следующих запросах куки будет отправляться автоматически).
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-09T02:54:32+03:00xonix4550Проботайте хорошенько протокол HTTP… Куки передаются как заголовки запроса, => задавать их примерно так:<br/><br/><div class="code"><pre><span class="c"># ЗДЕСЬ НАДО КАК-ТО ИСПОЛЬЗОВАТЬ КУКИ?</span>
<span class="n">req</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">"Cookie"</span><span class="p">,</span> <span class="s">"param1=val1; param2=val2; param3=123"</span><span class="p">)</span>
<span class="c"># получаем файловый объект странички:</span>
</pre></div><br/>П.С. По кукам проботайте вот эту статейку, чтоб все прояснилось <a href="http://www.citforum.ru/internet/html/cookie.shtml">http://www.citforum.ru/internet/html/cookie.shtml</a>
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-08T12:26:31+03:00Все ники заняты4539<div class="code"><pre><span class="c"># -*- coding: cp1251 -*-</span>
<span class="kn">import</span> <span class="nn">cookielib</span>
<span class="kn">import</span> <span class="nn">urllib</span>
<span class="kn">import</span> <span class="nn">urllib2</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">string</span>
<span class="c"># получаем дату 3 дня назад от текщей:</span>
<span class="n">date</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="mi">60</span><span class="o">*</span><span class="mi">60</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3</span><span class="p">)</span>
<span class="c"># преобразуем дату в формат ГГГГ-ММ-ДД:</span>
<span class="n">date</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">date</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="s">"-"</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">zfill</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">date</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="s">"-"</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">zfill</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">date</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="mi">2</span><span class="p">)</span>
<span class="c"># задаём параметры для передачи открываемой страничке методом POST:</span>
<span class="n">params</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">urlencode</span><span class="p">({</span><span class="s">'posts_less'</span> <span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s">'registered_before'</span> <span class="p">:</span> <span class="n">date</span><span class="p">,</span> <span class="s">'order_by'</span><span class="p">:</span> <span class="s">'registered'</span><span class="p">})</span>
<span class="c"># создаём объект запроса:</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="s">'http://forum.***/admin_users.php?action=find_user'</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
<span class="c"># ЗДЕСЬ НАДО КАК-ТО ИСПОЛЬЗОВАТЬ КУКИ?</span>
<span class="c"># ...</span>
<span class="c"># получаем файловый объект странички:</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
<span class="k">print</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="s">'cp1251'</span><span class="p">)</span>
</pre></div>
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-08T12:10:06+03:00Все ники заняты4535Спасибо.<br/>Насколько я понял, есть вроде два способа решения проблемы: использовать модуль “ClientCookie” (v0.3.5 beta от 2003-05-27), или использовать модуль “cookielib”, который есть в поставке Питона от ActiveState. Второй способ мне кажется лучше, т.к. не требует установки дополнительных вещей. Если я понял неверно, разъясните, please.<br/>И я не понял, как установить куки, используя cookielib. В конструкторе urllib2.Request есть два последних параметра, которые вроде надо использовать для установки куков. Как правильно заполнить эти параметры, я не понял.
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-08T09:43:54+03:00slivlen4528Для работы с куки есть <a href="http://docs.python.org/lib/http-cookie-processor.html">HTTPCookieProcessor</a>.<br/>Вот ряд примеров:<br/><a href="http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440574">http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440574</a><br/><a href="http://wwwsearch.sourceforge.net/ClientCookie/src/README-0_3_5b.html">http://wwwsearch.sourceforge.net/ClientCookie/src/README-0_3_5b.html</a>
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-08T00:49:16+03:00xonix4525Используй urllib2.urlopen, там возможно задать header'ы.<br/>Пример из стандартной доки:<br/><br/><div class="code"><pre><span class="kn">import</span> <span class="nn">urllib2</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="s">'http://www.example.com/'</span><span class="p">)</span>
<span class="n">req</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">'Referer'</span><span class="p">,</span> <span class="s">'http://www.python.org/'</span><span class="p">)</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
</pre></div><br/><div class="code"><pre><span class="kn">import</span> <span class="nn">urllib2</span>
<span class="n">opener</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">build_opener</span><span class="p">()</span>
<span class="n">opener</span><span class="o">.</span><span class="n">addheaders</span> <span class="o">=</span> <span class="p">[(</span><span class="s">'User-agent'</span><span class="p">,</span> <span class="s">'Mozilla/5.0'</span><span class="p">)]</span>
<span class="n">opener</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s">'http://www.example.com/'</span><span class="p">)</span>
</pre></div><br/>Как установить куки, думаю сам разберешься ))
Общий :: Network :: urllib: как залогиниться, используя куки?
2007-04-07T21:42:02+03:00Все ники заняты4522Windows XP SP2, ActivePython 2.5.<br/><div class="code"><pre>import urllib<br/>f = urllib.urlopen("http://***/***.php")</pre></div>Открываемая страничка читает куки. Если её открывать в браузере, я оказываюсь залогиненным. Если открывать вышеописанным способом - нет. Соответственно, содержимое странички совсем не то, что мне надо :).<br/>Можно ли как-то использовать свои куки, открывая урл из Питона?