Вход в систему и использование файлов cookie в pycurl

#python #cookies #python-requests #pycurl

#python #curl #pycurl

Вопрос:

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

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

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

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

Ответ №1:

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

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

(перед вторым запросом)

Комментарии:

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

Ответ №2:

Сначала вы должны сохранить файл 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}amp;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
 

Ответ №3:

wds работает правильно.

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

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

jb