2010-02-08 3 views
7

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

Я использую «кук»:

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

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

ответ

11

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

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

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

+1

Кто-то должен отметить это как правильно. Оно работает!!! Ванс, дай этому человеку немного реквизита !!! –

2

WDS находится прямо на.

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

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

ДБ

7

Вы должны хранить куки первый, а затем читать это:

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

Вот какой локон --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