Основные примеры кода
В этом разделе мы рассмотрим некоторые примеры кодирования 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 для разных операционных систем.