Как использовать одни и те же куки в нескольких запросах в python? - PullRequest
1 голос
/ 24 июля 2010

Я использую этот код:

def req(url, postfields):
    proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
    opener = urllib2.build_opener(proxy_support) 
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    return opener.open(url).read()

Чтобы сделать простой запрос http get (используя tor в качестве прокси).

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

Например:

req('http://loginpage', 'postfields')
source = req('http://pageforloggedinonly', 0)
#do stuff with source
req('http://anotherpageforloggedinonly', 'StuffFromSource')

Я знаю, что моя функция req не поддерживает POST (пока), но я отправил пост-поля с использованием httplib, поэтому я думаю, что могу понять это самостоятельно, но я не понимаю, как использовать куки, я видел несколько примеров но все они только один запрос, я хочу повторно использовать cookie из первого запроса входа в систему в последующих запросах или сохранить / использовать cookie из файла (как делает curl), что упростит все.

Код, который я разместил, предназначен только для иллюстрации того, чего я пытаюсь достичь. Думаю, я буду использовать httplib (2) для финального приложения.

UPDATE:

cookielib.LWPCOokieJar работал нормально, вот пример, который я сделал для тестирования:

import urllib2, cookielib, os

def request(url, postfields, cookie):
    urlopen = urllib2.urlopen
    cj = cookielib.LWPCookieJar()
    Request = urllib2.Request

    if os.path.isfile(cookie):
        cj.load(cookie)

    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)
    txheaders =  {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}

    req = Request(url, postfields, txheaders)
    handle = urlopen(req)
    cj.save(cookie)
    return handle.read()

print request('http://google.com', None, 'cookie.txt')

1 Ответ

2 голосов
/ 24 июля 2010

Модуль cookielib - это то, что вам нужно для этого. Есть хороший учебник с некоторыми примерами кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...