Вход в систему и использование куки в Pycurl - PullRequest
8 голосов
/ 08 февраля 2010

Мне нужно скачать файл, который находится на защищенной паролем странице. Чтобы попасть на страницу вручную, я сначала должен пройти аутентификацию через обычную страницу входа. Я хочу использовать curl для извлечения этой страницы из скрипта.
Мой скрипт сначала логины. Похоже, что все прошло успешно - он возвращает 200 из PUT в / login. Однако выборка нужной страницы завершается с 500.

Я использую «банку печенья»:

C.setopt(pycurl.COOKIEJAR, 'cookie.txt')

В подробном режиме я могу видеть, как файлы cookie обмениваются при получении нужного мне файла. Теперь мой вопрос: есть ли еще что-то для использования COOKIEJAR?

Ответы [ 3 ]

12 голосов
/ 25 февраля 2010

Я верю, что Curl будет хранить куки, но вы должны использовать их явно. Я только когда-либо использовал интерфейс командной строки для этого, хотя. Сканирование документации, я думаю, вы можете попробовать:

C.setopt(pycurl.COOKIEFILE, 'cookie.txt')

(до второго запроса)

8 голосов
/ 31 октября 2013

Вы должны сначала сохранить cookie, а затем прочитать его:

C.setopt(pycurl.COOKIEJAR, 'cookie.txt')
C.setopt(pycurl.COOKIEFILE, 'cookie.txt')

Вот что вернуло curl --help:

-b, --cookie STRING/FILE  String or file to read cookies from (H)
-c, --cookie-jar FILE  Write cookies to this file after operation (H)

Смотрите этот образец:

def connect(self):
    '''
    Connect to NGNMS server
    '''
    host_url = self.ngnms_host + '/login'

    c = pycurl.Curl()
    c.setopt(c.URL, host_url)
    c.setopt(pycurl.TIMEOUT, 10)

    c.setopt(pycurl.FOLLOWLOCATION, 1)
    c.setopt(pycurl.POSTFIELDS, 'j_username={ngnms_user}&j_password={ngnms_password}'.format(**self.ngnms_login))
    c.setopt(pycurl.COOKIEJAR, 'data/ngnms.cookie')

    # c.setopt(c.VERBOSE, True)

    c.setopt(pycurl.SSL_VERIFYPEER, 0);
    session = c
    return session
2 голосов
/ 12 января 2011

WDS правильно.

для вашего дальнейшего назидания, доступные опции основаны на http://curl.haxx.se/libcurl/c/curl_easy_setopt.html (см. Раздел по ярлыкам на cookie).

a 500 - внутренняя ошибка сервера ... трудно быть уверенным, можно ли в этом винить ваш скрипт, не зная больше информации о том, что здесь происходит. возможно, вы не смогли передать другие данные, ожидаемые страницей (не относящиеся к файлам cookie) для всего, что мы знаем (и они не реализовали изящную обработку ошибок!)

ДБ

...