#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