Авторизация на pycurl: ru_python — LiveJournal

Основные примеры кода

В этом разделе мы рассмотрим некоторые примеры кодирования PycURL, демонстрирующие различные функциональные возможности интерфейса.

Python examples of pycurl.

def __init__(self, url, auth, verify):
        self.url = url
        self.received_buffer = BytesIO()

        headers = ['Cache-Control: no-cache', 'Accept: text/event-stream']

        self.curl = pycurl.Curl()
        self.curl.setopt(pycurl.URL, url)
        self.curl.setopt(pycurl.ENCODING, 'gzip')
        self.curl.setopt(pycurl.CONNECTTIMEOUT, 10)
        self.curl.setopt(pycurl.WRITEDATA, self.received_buffer)

        # Marathon >= 1.7.x returns 30x responses for /v2/events responses
        # when they're coming from a non-leader. So we follow redirects.
        self.curl.setopt(pycurl.FOLLOWLOCATION, True)
        self.curl.setopt(pycurl.MAXREDIRS, 1)
        self.curl.setopt(pycurl.UNRESTRICTED_AUTH, True)

        # The below settings are to prevent the connection from hanging if the
        # connection breaks silently. Since marathon-lb only listens, silent
        # connection failure results in marathon-lb waiting infinitely.
        #
        # Minimum bytes/second below which it is considered "low speed". So
        # "low speed" here refers to 0 bytes/second.
        self.curl.setopt(pycurl.LOW_SPEED_LIMIT, 1)
        # How long (in seconds) it's allowed to go below the speed limit
        # before it times out
        self.curl.setopt(pycurl.LOW_SPEED_TIME, 300)

        if auth and type(auth) is DCOSAuth:
            auth.refresh_auth_header()
            headers.append('Authorization: %s' % auth.auth_header)
        elif auth:
            self.curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
            self.curl.setopt(pycurl.USERPWD, '%s:%s' % auth)
        if verify:
            self.curl.setopt(pycurl.CAINFO, verify)
        else:
            self.curl.setopt(pycurl.SSL_VERIFYHOST, 0)
            self.curl.setopt(pycurl.SSL_VERIFYPEER, 0)

        self.curl.setopt(pycurl.HTTPHEADER, headers)

        self.curlmulti = pycurl.CurlMulti()
        self.curlmulti.add_handle(self.curl)

        self.status_code = 0 

def perform(self):
		self.__performHead=""
		self.__performBody=""

		conn=pycurl.Curl()
		conn.setopt(pycurl.SSL_VERIFYPEER,False)
		conn.setopt(pycurl.SSL_VERIFYHOST,1)
		conn.setopt(pycurl.URL,self.completeUrl)

		if self.__method or self.__userpass:
			if self.__method=="basic":
				conn.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
			elif self.__method=="ntlm":
				conn.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_NTLM)
			elif self.__method=="digest":
				conn.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_DIGEST)
			conn.setopt(pycurl.USERPWD, self.__userpass)

		if self.__timeout:
			conn.setopt(pycurl.CONNECTTIMEOUT, self.__timeout)
			conn.setopt(pycurl.NOSIGNAL, 1)

		if self.__totaltimeout:
			conn.setopt(pycurl.TIMEOUT, self.__totaltimeout)
			conn.setopt(pycurl.NOSIGNAL, 1)

		conn.setopt(pycurl.WRITEFUNCTION, self.body_callback)
		conn.setopt(pycurl.HEADERFUNCTION, self.header_callback)

		if self.__proxy!=None:
			conn.setopt(pycurl.PROXY,self.__proxy)
			if self.__headers.has_key("Proxy-Connection"):
				del self.__headers["Proxy-Connection"]

		conn.setopt(pycurl.HTTPHEADER,self.__getHeaders())
		if self.method=="POST":
			conn.setopt(pycurl.POSTFIELDS,self.__postdata)
		conn.perform()

		rp=Response()
		rp.parseResponse(self.__performHead)
		rp.addContent(self.__performBody)

		self.response=rp

	######### ESTE conjunto de funciones no es necesario para el uso habitual de la clase 

Авторизация на pycurl

вообщем после гугления и чтения многочисленных примеров было слепленно вот это


#!/usr/bin/python
#
# getbalance.py
#
# Copyright 2022 Dmitry Kalenchuk <koirn@koirn-debianbook>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.

import pynotify
import sys
import pycurl
import StringIO

def main():

if not pynotify.init(“Basics”):
sys.exit(1)

c = pycurl.Curl()

c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.SSL_VERIFYHOST, 0)
c.setopt(pycurl.URL, “https://stat.byfly.by“)
c.setopt (pycurl.HEADER, 1);
c.setopt (pycurl.USERAGENT, “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3”);
c.setopt (pycurl.FOLLOWLOCATION, 1);
c.setopt (pycurl.VERBOSE, 1);
c.setopt (pycurl.AUTOREFERER, 1);
c.setopt(pycurl.POSTFIELDS,”p_logname=”mylogin”&p_pwd=”my_pass”&p_lang=ru”)
c.setopt(pycurl.POST,1)
b = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.perform()
n = pynotify.Notification(“Summary”, b.getvalue())
print b.getvalue()

if not n.show():
print “Failed to send notification”
sys.exit(1)

return 0

if __name__ == ‘__main__’: main()

В ответ слышится “404 Not Found”. Как я понял, после авторизации браузер перекидывает на страничку статистики, а со скриптом этого не происходит. Или же я не могу просто пройти авторизацию.

Ос mac и linux

Для Mac OS и Linux установка PycURL является самой простой, так как она не имеет зависимостей, а libcURL устанавливается по умолчанию. Просто запустите следующую команду в своем терминале, и установка будет завершена:

Предварительные условия

Прежде чем приступить к этому уроку, обратите внимание, что есть несколько предварительных условий. Вы должны иметь базовое понимание синтаксиса Python и/или иметь, по крайней мере, опыт программирования на начальном уровне на каком-либо другом языке.

Пример 2: изучение заголовков ответа get

Вы также можете получить заголовки ответов веб-сайта с помощью PycURL. Заголовки ответа можно проверить по нескольким причинам, например, чтобы узнать, какая кодировка была отправлена с ответом и соответствует ли она кодировке, предоставленной сервером.

В нашем примере мы будем изучать заголовки ответов просто для того, чтобы найти различные имена атрибутов и их соответствующие значения.

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

Мы предоставляем URL-адрес сайта, заголовки ответов которого мы хотим изучить. HEADERFUNCTION отправляет заголовки ответа в функцию display_header(), где они соответствующим образом отформатированы. Заголовки ответа декодируются в соответствии с указанным стандартом и делятся на соответствующие им имена и значения. Пробелы между именами и значениями удаляются, а затем они переводятся в нижний регистр.

Заголовки ответа затем записываются в объект BytesIO, передаются запрашивающей стороне и, наконец, отображаются в надлежащем формате.

Пример 4: загрузка файлов с помощью multipart post

Есть несколько способов воспроизвести загрузку файла в HTML-форме с помощью PycURL:

Пример 7: запись в файл

PycURL также можно использовать для сохранения ответа в файл. Мы используем функцию open, чтобы открыть файл, и ответ возвращается в виде файлового объекта. Функция open имеет вид: open (файл, режим). Параметр file представляет путь и имя файла, который нужно открыть, а mode представляет режим, в котором вы хотите открыть файл.

Установка

Процесс установки PycURL довольно прост и понятен для всех операционных систем. Вам просто нужно установить libcURL в вашей системе, чтобы использовать PycURL.

Установка через pip

$ pip install pycurl 

Через easy_install

$ easy_install pycurl

Заключение

В этом руководстве мы узнали об интерфейсе PycURL в Python. Мы начали с обсуждения некоторых общих функций PycURL и его связи с библиотекой libcURL в Python. Затем мы увидели процесс установки PycURL для разных операционных систем.

Похожее:  Бесплатный SMTP сервер — Настройка СМТП для Gmail, Yahoo, Hotmail, Yandex, – Справка ePochta Mailer |

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *