Найти - Пользователи
Полная версия: Как получить заголовки из HTTP 302 Found
Начало » Web » Как получить заголовки из HTTP 302 Found
1 2
Tassadar
Привет, сообщество!

Подскажите, пожалуйста, как не совсем специалисту в Питоне, которому сейчас надо его использовать в узких целях.

Есть сайт. Нужно получить его Cookies. В ответ на GET запрос он отправляет два ответа, первый: HTTP 302 Found, в котором есть нужные мне куки, и следом второй: 200 OK, в котором этих куки уже нет.

Я пробую делать так:

p = opener.open("http://URL")
cookie = unicode(p.headers['Set-Cookie'], 'cp1251')

Но оно, конечно, ловит пакет OK и говорит, что никаких куки в нем нет.

Вы не подскажете, как мне обработать пакет 302 Found так, чтобы извлечь из него нужные мне куки?

Заранее большое спасибо.
fata1ex
Попробуйте requests. Там с этим удобнее.
Tassadar
Попробовал - там та же история, в качестве ответа понимается пакет OK, в котором куки нет. А мне бы как-то обработать пакет 302.
fata1ex
Как насчет чего-нибудь вроде allow_redirects=False?
py.user.next
>>> 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()
>>>
lorien
>>> 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
py.user.next
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']
>>>
Tassadar
Спасибо, ребят, но все равно не работает.

Вот какова суть: нужно выполнить поиск по блогам через 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/>]>

Тут есть все, что мне нужно, но как его выдрать из объекта CookieJar? Эклипс ничего не подсказывает по точке.
fata1ex
Tassadar, вы пробовали поставить опцию allow_redirects=False при запросе в requests? Меня терзают смутные сомнения.
Tassadar
fata1ex
Tassadar, вы пробовали поставить опцию allow_redirects=False при запросе в requests? Меня терзают смутные сомнения.

Пробовал, с ним я получаю только первый куки - yandexuid. А мне нужны оба.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB