Форум сайта python.su
Привет, сообщество!
Подскажите, пожалуйста, как не совсем специалисту в Питоне, которому сейчас надо его использовать в узких целях.
Есть сайт. Нужно получить его Cookies. В ответ на GET запрос он отправляет два ответа, первый: HTTP 302 Found, в котором есть нужные мне куки, и следом второй: 200 OK, в котором этих куки уже нет.
Я пробую делать так:
p = opener.open("http://URL")
cookie = unicode(p.headers['Set-Cookie'], 'cp1251')
Отредактировано Tassadar (Июнь 20, 2012 23:36:10)
Офлайн
Офлайн
Попробовал - там та же история, в качестве ответа понимается пакет OK, в котором куки нет. А мне бы как-то обработать пакет 302.
Офлайн
Как насчет чего-нибудь вроде allow_redirects=False?
Офлайн
>>> import http.client
>>>
>>> conn = http.client.HTTPConnection('www.yandex.ru')
>>> conn.connect()
>>> conn.request('GET', '/index.html')
>>> resp = conn.getresponse()
>>> print(resp.getheaders())
[('Server', 'nginx'), ('Date', 'Wed, 20 Jun 2012 23:18:42 GMT'), ('Content-Type', 'text/html'), ('Content-Length', '178'), ('Location', 'http://www.yandex.ru/'), ('Connection', 'close')]
>>> conn.close()
>>>
Офлайн
>>> from grab import Grab
>>> g = Grab()
>>> g.request(follow_location=False, url='http://yandex.ru')
<grab.response.Response object at 0x7fd67f3a9210>
>>> g.response.cookies
{}
>>> print g.response.headers
From nobody Thu Jun 21 09:48:24 2012
Connection: Keep-Alive
Date: Thu, 21 Jun 2012 02:51:14 GMT
Location: http://www.yandex.ru/
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=iso-8859-1
Transfer-Encoding: chunked
Офлайн
import http.client conn = http.client.HTTPConnection('www.yandex.ru') #conn.set_debuglevel(1) conn.connect() conn.request('GET', '/') resp = conn.getresponse() for hdr, val in resp.getheaders(): print('{0}: {1}'.format(hdr, val)) conn.close()
>>> [h[0] for h in resp.getheaders()] ['Server', 'Date', 'Content-Type', 'Connection', 'Cache-Control', 'Content-Length', 'Expires', 'Last-Modified', 'P3P', 'Set-Cookie', 'X-Frame-Options', 'X-XRDS-Location'] >>>
Офлайн
Спасибо, ребят, но все равно не работает.
Вот какова суть: нужно выполнить поиск по блогам через blogs.yandex.ru.
Для того, чтобы поиск сработал, надо передать ему два куки: yandexuid и fuid01.
Эти куки сетятся при входе на главную страницу blogs.yandex.ru. При этом yandexuid мы получаем от самого blogs.yandex.ru, а дальше происходит такой финт:
1. С blogs.yandex.ru нас редиректят на http://kiks.yandex.ru/su/
2. kiks.yandex.ru сначала отвечает 302 Found. К этому пакету прилагаются куки fuid01.
3. После этого с kiks.yandex.ru приходит пакет 200 ОК, в котором куки уже нет.
К сожалению, ни один из перечисленных методов не позволяет получить вот этот второй куки, fuid01
Нет ли у кого-нибудь еще каких-то идей, как их можно получить?
UPD:
С помощью HTTPCookieProcessor получилось немного продвинуться вперед. После запуска кода:
import urllib2 class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler): def http_error_302(self, req, fp, code, msg, headers): return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers) http_error_301 = http_error_303 = http_error_307 = http_error_302 cookieprocessor = urllib2.HTTPCookieProcessor() opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor) urllib2.install_opener(opener) response =urllib2.urlopen("http://blogs.yandex.ru") response =urllib2.urlopen("http://kiks.yandex.ru/su/") print cookieprocessor.cookiejar
<cookielib.CookieJar[<Cookie fuid01=4fe472a81d844fee.5EepullvlMqL-9gzzK6t4fuYfS7kJjWA9wQ3mFLFEbNbvvY11dHhC-OB7NCwbLYoWvXDKuVZg9JoVaffJnkQ9eNKq7QDc-h9RBGwKi1XyZ9jTHdo2pS_aMRxp3C37F6f for .yandex.ru/>, <Cookie yandexuid=4952104781340371624 for .yandex.ru/>]>
Отредактировано Tassadar (Июнь 22, 2012 16:28:05)
Офлайн
Tassadar, вы пробовали поставить опцию allow_redirects=False при запросе в requests? Меня терзают смутные сомнения.
Офлайн
fata1ex
Tassadar, вы пробовали поставить опцию allow_redirects=False при запросе в requests? Меня терзают смутные сомнения.
Офлайн