# pycurl - pydoc - phpman

Help on module pycurl:

## NAME
    pycurl - This module implements an interface to the cURL library.

## DESCRIPTION
    Types:

    Curl() -> New object.  Create a new curl object.
    CurlMulti() -> New object.  Create a new curl multi object.
    CurlShare() -> New object.  Create a new curl share object.

    Functions:

### global_init
### global_cleanup
### version_info

## CLASSES
    builtins.Exception(builtins.BaseException)
        error
    builtins.object
        Curl
        CurlMulti
        CurlShare

### class Curl
     |  Curl() -> New Curl object
     |
     |  Creates a new :ref:`curlobject` which corresponds to a
     |  ``CURL`` handle in libcurl. Curl objects automatically set
     |  CURLOPT_VERBOSE to 0, CURLOPT_NOPROGRESS to 1, provide a default
     |  CURLOPT_USERAGENT and setup CURLOPT_ERRORBUFFER to point to a
     |  private error buffer.
     |
     |  Implicitly calls :py:func:`pycurl.global_init` if the latter has not yet been called.
     |
     |  Methods defined here:
     |
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |
     |  __getstate__(...)
     |
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |
     |  __setstate__(...)
     |
     |  close(...)
     |      close() -> None
     |
     |      Close handle and end curl session.
     |
     |      Corresponds to `curl_easy_cleanup`_ in libcurl. This method is
     |      automatically called by pycurl when a Curl object no longer has any
     |      references to it, but can also be called explicitly.
     |
     |      .. _curl_easy_cleanup:
     |          <https://curl.haxx.se/libcurl/c/curl_easy_cleanup.html>
     |
     |  errstr(...)
     |      errstr() -> string
     |
     |      Return the internal libcurl error buffer of this handle as a string.
     |
     |      Return value is a ``str`` instance on all Python versions.
     |      On Python 3, error buffer data is decoded using Python's default encoding
     |      at the time of the call. If this decoding fails, ``UnicodeDecodeError`` is
     |      raised. Use :ref:`errstr_raw <errstr_raw>` to retrieve the error buffer
     |      as a byte string in this case.
     |
     |      On Python 2, ``errstr`` and ``errstr_raw`` behave identically.
     |
     |  errstr_raw(...)
     |      errstr_raw() -> byte string
     |
     |      Return the internal libcurl error buffer of this handle as a byte string.
     |
     |      Return value is a ``str`` instance on Python 2 and ``bytes`` instance
     |      on Python 3. Unlike :ref:`errstr_raw <errstr_raw>`, ``errstr_raw``
     |      allows reading libcurl error buffer in Python 3 when its contents is not
     |      valid in Python's default encoding.
     |
     |      On Python 2, ``errstr`` and ``errstr_raw`` behave identically.
     |
     |      *Added in version 7.43.0.2.*
     |
     |  getinfo(...)
     |      getinfo(option) -> Result
     |
     |      Extract and return information from a curl session,
     |      decoding string data in Python's default encoding at the time of the call.
     |      Corresponds to `curl_easy_getinfo`_ in libcurl.
     |      The ``getinfo`` method should not be called unless
     |      ``perform`` has been called and finished.
     |
     |      *option* is a constant corresponding to one of the
     |      ``CURLINFO_*`` constants in libcurl. Most option constant names match
     |      the respective ``CURLINFO_*`` constant names with the ``CURLINFO_`` prefix
     |      removed, for example ``CURLINFO_CONTENT_TYPE`` is accessible as
     |      ``pycurl.CONTENT_TYPE``. Exceptions to this rule are as follows:
     |
     |      - ``CURLINFO_FILETIME`` is mapped as ``pycurl.INFO_FILETIME``
     |      - ``CURLINFO_COOKIELIST`` is mapped as ``pycurl.INFO_COOKIELIST``
     |      - ``CURLINFO_CERTINFO`` is mapped as ``pycurl.INFO_CERTINFO``
     |      - ``CURLINFO_RTSP_CLIENT_CSEQ`` is mapped as ``pycurl.INFO_RTSP_CLIENT_CSEQ``
     |      - ``CURLINFO_RTSP_CSEQ_RECV`` is mapped as ``pycurl.INFO_RTSP_CSEQ_RECV``
     |      - ``CURLINFO_RTSP_SERVER_CSEQ`` is mapped as ``pycurl.INFO_RTSP_SERVER_CSEQ``
     |      - ``CURLINFO_RTSP_SESSION_ID`` is mapped as ``pycurl.INFO_RTSP_SESSION_ID``
     |
     |      The type of return value depends on the option, as follows:
     |
     |      - Options documented by libcurl to return an integer value return a
     |        Python integer (``long`` on Python 2, ``int`` on Python 3).
     |      - Options documented by libcurl to return a floating point value
     |        return a Python ``float``.
     |      - Options documented by libcurl to return a string value
     |        return a Python string (``str`` on Python 2 and Python 3).
     |        On Python 2, the string contains whatever data libcurl returned.
     |        On Python 3, the data returned by libcurl is decoded using the
     |        default string encoding at the time of the call.
     |        If the data cannot be decoded using the default encoding, ``UnicodeDecodeError``
     |        is raised. Use :ref:`getinfo_raw <getinfo_raw>`
     |        to retrieve the data as ``bytes`` in these
     |        cases.
     |      - ``SSL_ENGINES`` and ``INFO_COOKIELIST`` return a list of strings.
     |        The same encoding caveats apply; use :ref:`getinfo_raw <getinfo_raw>`
     |        to retrieve the
     |        data as a list of byte strings.
     |      - ``INFO_CERTINFO`` returns a list with one element
     |        per certificate in the chain, starting with the leaf; each element is a
     |        sequence of *(key, value)* tuples where both ``key`` and ``value`` are
     |        strings. String encoding caveats apply; use :ref:`getinfo_raw <getinfo_raw>`
     |        to retrieve
     |        certificate data as byte strings.
     |
     |      On Python 2, ``getinfo`` and ``getinfo_raw`` behave identically.
     |
     |      Example usage::
     |
     |          import pycurl
     |          c = pycurl.Curl()
     |          c.setopt(pycurl.OPT_CERTINFO, 1)
     |          c.setopt(pycurl.URL, "<https://python.org>")
     |          c.setopt(pycurl.FOLLOWLOCATION, 1)
     |          c.perform()
     |          print(c.getinfo(pycurl.HTTP_CODE))
     |          # --> 200
     |          print(c.getinfo(pycurl.EFFECTIVE_URL))
     |          # --> "<https://www.python.org/>"
     |          certinfo = c.getinfo(pycurl.INFO_CERTINFO)
     |          print(certinfo)
     |          # --> [(('Subject', 'C = AU, ST = Some-State, O = PycURL test suite,
     |                   CN = localhost'), ('Issuer', 'C = AU, ST = Some-State,
     |                   O = PycURL test suite, OU = localhost, CN = localhost'),
     |                  ('Version', '0'), ...)]
     |
     |
     |      Raises pycurl.error exception upon failure.
     |
     |      .. _curl_easy_getinfo:
     |          <https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html>
     |
     |  getinfo_raw(...)
     |      getinfo_raw(option) -> Result
     |
     |      Extract and return information from a curl session,
     |      returning string data as byte strings.
     |      Corresponds to `curl_easy_getinfo`_ in libcurl.
     |      The ``getinfo_raw`` method should not be called unless
     |      ``perform`` has been called and finished.
     |
     |      *option* is a constant corresponding to one of the
     |      ``CURLINFO_*`` constants in libcurl. Most option constant names match
     |      the respective ``CURLINFO_*`` constant names with the ``CURLINFO_`` prefix
     |      removed, for example ``CURLINFO_CONTENT_TYPE`` is accessible as
     |      ``pycurl.CONTENT_TYPE``. Exceptions to this rule are as follows:
     |
     |      - ``CURLINFO_FILETIME`` is mapped as ``pycurl.INFO_FILETIME``
     |      - ``CURLINFO_COOKIELIST`` is mapped as ``pycurl.INFO_COOKIELIST``
     |      - ``CURLINFO_CERTINFO`` is mapped as ``pycurl.INFO_CERTINFO``
     |      - ``CURLINFO_RTSP_CLIENT_CSEQ`` is mapped as ``pycurl.INFO_RTSP_CLIENT_CSEQ``
     |      - ``CURLINFO_RTSP_CSEQ_RECV`` is mapped as ``pycurl.INFO_RTSP_CSEQ_RECV``
     |      - ``CURLINFO_RTSP_SERVER_CSEQ`` is mapped as ``pycurl.INFO_RTSP_SERVER_CSEQ``
     |      - ``CURLINFO_RTSP_SESSION_ID`` is mapped as ``pycurl.INFO_RTSP_SESSION_ID``
     |
     |      The type of return value depends on the option, as follows:
     |
     |      - Options documented by libcurl to return an integer value return a
     |        Python integer (``long`` on Python 2, ``int`` on Python 3).
     |      - Options documented by libcurl to return a floating point value
     |        return a Python ``float``.
     |      - Options documented by libcurl to return a string value
     |        return a Python byte string (``str`` on Python 2, ``bytes`` on Python 3).
     |        The string contains whatever data libcurl returned.
     |        Use :ref:`getinfo <getinfo>` to retrieve this data as a Unicode string on Python 3.
     |      - ``SSL_ENGINES`` and ``INFO_COOKIELIST`` return a list of byte strings.
     |        The same encoding caveats apply; use :ref:`getinfo <getinfo>` to retrieve the
     |        data as a list of potentially Unicode strings.
     |      - ``INFO_CERTINFO`` returns a list with one element
     |        per certificate in the chain, starting with the leaf; each element is a
     |        sequence of *(key, value)* tuples where both ``key`` and ``value`` are
     |        byte strings. String encoding caveats apply; use :ref:`getinfo <getinfo>`
     |        to retrieve
     |        certificate data as potentially Unicode strings.
     |
     |      On Python 2, ``getinfo`` and ``getinfo_raw`` behave identically.
     |
     |      Example usage::
     |
     |          import pycurl
     |          c = pycurl.Curl()
     |          c.setopt(pycurl.OPT_CERTINFO, 1)
     |          c.setopt(pycurl.URL, "<https://python.org>")
     |          c.setopt(pycurl.FOLLOWLOCATION, 1)
     |          c.perform()
     |          print(c.getinfo_raw(pycurl.HTTP_CODE))
     |          # --> 200
     |          print(c.getinfo_raw(pycurl.EFFECTIVE_URL))
     |          # --> b"<https://www.python.org/>"
     |          certinfo = c.getinfo_raw(pycurl.INFO_CERTINFO)
     |          print(certinfo)
     |          # --> [((b'Subject', b'C = AU, ST = Some-State, O = PycURL test suite,
     |                   CN = localhost'), (b'Issuer', b'C = AU, ST = Some-State,
     |                   O = PycURL test suite, OU = localhost, CN = localhost'),
     |                  (b'Version', b'0'), ...)]
     |
     |
     |      Raises pycurl.error exception upon failure.
     |
     |      *Added in version 7.43.0.2.*
     |
     |      .. _curl_easy_getinfo:
     |          <https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html>
     |
     |  pause(...)
     |      pause(bitmask) -> None
     |
     |      Pause or unpause a curl handle. Bitmask should be a value such as
     |      PAUSE_RECV or PAUSE_CONT.
     |
     |      Corresponds to `curl_easy_pause`_ in libcurl. The argument should be
     |      derived from the ``PAUSE_RECV``, ``PAUSE_SEND``, ``PAUSE_ALL`` and
     |      ``PAUSE_CONT`` constants.
     |
     |      Raises pycurl.error exception upon failure.
     |
     |      .. _curl_easy_pause: <https://curl.haxx.se/libcurl/c/curl_easy_pause.html>
     |
     |  perform(...)
     |      perform() -> None
     |
     |      Perform a file transfer.
     |
     |      Corresponds to `curl_easy_perform`_ in libcurl.
     |
     |      Raises pycurl.error exception upon failure.
     |
     |      .. _curl_easy_perform:
     |          <https://curl.haxx.se/libcurl/c/curl_easy_perform.html>
     |
     |  perform_rb(...)
     |      perform_rb() -> response_body
     |
     |      Perform a file transfer and return response body as a byte string.
     |
     |      This method arranges for response body to be saved in a StringIO
     |      (Python 2) or BytesIO (Python 3) instance, then invokes :ref:`perform <perform>`
     |      to perform the file transfer, then returns the value of the StringIO/BytesIO
     |      instance which is a ``str`` instance on Python 2 and ``bytes`` instance
     |      on Python 3. Errors during transfer raise ``pycurl.error`` exceptions
     |      just like in :ref:`perform <perform>`.
     |
     |      Use :ref:`perform_rs <perform_rs>` to retrieve response body as a string
     |      (``str`` instance on both Python 2 and 3).
     |
     |      Raises ``pycurl.error`` exception upon failure.
     |
     |      *Added in version 7.43.0.2.*
     |
     |  perform_rs(...)
     |      perform_rs() -> response_body
     |
     |      Perform a file transfer and return response body as a string.
     |
     |      On Python 2, this method arranges for response body to be saved in a StringIO
     |      instance, then invokes :ref:`perform <perform>`
     |      to perform the file transfer, then returns the value of the StringIO instance.
     |      This behavior is identical to :ref:`perform_rb <perform_rb>`.
     |
     |      On Python 3, this method arranges for response body to be saved in a BytesIO
     |      instance, then invokes :ref:`perform <perform>`
     |      to perform the file transfer, then decodes the response body in Python's
     |      default encoding and returns the decoded body as a Unicode string
     |      (``str`` instance). *Note:* decoding happens after the transfer finishes,
     |      thus an encoding error implies the transfer/network operation succeeded.
     |
     |      Any transfer errors raise ``pycurl.error`` exception,
     |      just like in :ref:`perform <perform>`.
     |
     |      Use :ref:`perform_rb <perform_rb>` to retrieve response body as a byte
     |      string (``bytes`` instance on Python 3) without attempting to decode it.
     |
     |      Raises ``pycurl.error`` exception upon failure.
     |
     |      *Added in version 7.43.0.2.*
     |
     |  reset(...)
     |      reset() -> None
     |
     |      Reset all options set on curl handle to default values, but preserves
     |      live connections, session ID cache, DNS cache, cookies, and shares.
     |
     |      Corresponds to `curl_easy_reset`_ in libcurl.
     |
     |      .. _curl_easy_reset: <https://curl.haxx.se/libcurl/c/curl_easy_reset.html>
     |
     |  setopt(...)
     |      setopt(option, value) -> None
     |
     |      Set curl session option. Corresponds to `curl_easy_setopt`_ in libcurl.
     |
     |      *option* specifies which option to set. PycURL defines constants
     |      corresponding to ``CURLOPT_*`` constants in libcurl, except that
     |      the ``CURLOPT_`` prefix is removed. For example, ``CURLOPT_URL`` is
     |      exposed in PycURL as ``pycurl.URL``, with some exceptions as detailed below.
     |      For convenience, ``CURLOPT_*``
     |      constants are also exposed on the Curl objects themselves::
     |
     |          import pycurl
     |          c = pycurl.Curl()
     |          c.setopt(pycurl.URL, "<http://www.python.org/>")
     |          # Same as:
     |          c.setopt(c.URL, "<http://www.python.org/>")
     |
     |      The following are exceptions to option constant naming convention:
     |
     |      - ``CURLOPT_FILETIME`` is mapped as ``pycurl.OPT_FILETIME``
     |      - ``CURLOPT_CERTINFO`` is mapped as ``pycurl.OPT_CERTINFO``
     |      - ``CURLOPT_COOKIELIST`` is mapped as ``pycurl.COOKIELIST``
     |        and, as of PycURL 7.43.0.2, also as ``pycurl.OPT_COOKIELIST``
     |      - ``CURLOPT_RTSP_CLIENT_CSEQ`` is mapped as ``pycurl.OPT_RTSP_CLIENT_CSEQ``
     |      - ``CURLOPT_RTSP_REQUEST`` is mapped as ``pycurl.OPT_RTSP_REQUEST``
     |      - ``CURLOPT_RTSP_SERVER_CSEQ`` is mapped as ``pycurl.OPT_RTSP_SERVER_CSEQ``
     |      - ``CURLOPT_RTSP_SESSION_ID`` is mapped as ``pycurl.OPT_RTSP_SESSION_ID``
     |      - ``CURLOPT_RTSP_STREAM_URI`` is mapped as ``pycurl.OPT_RTSP_STREAM_URI``
     |      - ``CURLOPT_RTSP_TRANSPORT`` is mapped as ``pycurl.OPT_RTSP_TRANSPORT``
     |
     |      *value* specifies the value to set the option to. Different options accept
     |      values of different types:
     |
     |      - Options specified by `curl_easy_setopt`_ as accepting ``1`` or an
     |        integer value accept Python integers, long integers (on Python 2.x) and
     |        booleans::
     |
     |          c.setopt(pycurl.FOLLOWLOCATION, True)
     |          c.setopt(pycurl.FOLLOWLOCATION, 1)
     |          # Python 2.x only:
     |          c.setopt(pycurl.FOLLOWLOCATION, 1L)
     |
     |      - Options specified as accepting strings by ``curl_easy_setopt`` accept
     |        byte strings (``str`` on Python 2, ``bytes`` on Python 3) and
     |        Unicode strings with ASCII code points only.
     |        For more information, please refer to :ref:`unicode`. Example::
     |
     |          c.setopt(pycurl.URL, "<http://www.python.org/>")
     |          c.setopt(pycurl.URL, u"<http://www.python.org/>")
     |          # Python 3.x only:
     |          c.setopt(pycurl.URL, b"<http://www.python.org/>")
     |
     |      - ``HTTP200ALIASES``, ``HTTPHEADER``, ``POSTQUOTE``, ``PREQUOTE``,
     |        ``PROXYHEADER`` and
     |        ``QUOTE`` accept a list or tuple of strings. The same rules apply to these
     |        strings as do to string option values. Example::
     |
     |          c.setopt(pycurl.HTTPHEADER, ["Accept:"])
     |          c.setopt(pycurl.HTTPHEADER, ("Accept:",))
     |
     |      - ``READDATA`` accepts a file object or any Python object which has
     |        a ``read`` method. On Python 2, a file object will be passed directly
     |        to libcurl and may result in greater transfer efficiency, unless
     |        PycURL has been compiled with ``AVOID_STDIO`` option.
     |        On Python 3 and on Python 2 when the value is not a true file object,
     |        ``READDATA`` is emulated in PycURL via ``READFUNCTION``.
     |        The file should generally be opened in binary mode. Example::
     |
     |          f = open('file.txt', 'rb')
     |          c.setopt(c.READDATA, f)
     |
     |      - ``WRITEDATA`` and ``WRITEHEADER`` accept a file object or any Python
     |        object which has a ``write`` method. On Python 2, a file object will
     |        be passed directly to libcurl and may result in greater transfer efficiency,
     |        unless PycURL has been compiled with ``AVOID_STDIO`` option.
     |        On Python 3 and on Python 2 when the value is not a true file object,
     |        ``WRITEDATA`` is emulated in PycURL via ``WRITEFUNCTION``.
     |        The file should generally be opened in binary mode. Example::
     |
     |          f = open('/dev/null', 'wb')
     |          c.setopt(c.WRITEDATA, f)
     |
     |      - ``*FUNCTION`` options accept a function. Supported callbacks are documented
     |        in :ref:`callbacks`. Example::
     |
     |          # Python 2
     |          import StringIO
     |          b = StringIO.StringIO()
     |          c.setopt(pycurl.WRITEFUNCTION, b.write)
     |
     |      - ``SHARE`` option accepts a :ref:`curlshareobject`.
     |
     |      It is possible to set integer options - and only them - that PycURL does
     |      not know about by using the numeric value of the option constant directly.
     |      For example, ``pycurl.VERBOSE`` has the value 42, and may be set as follows::
     |
     |          c.setopt(42, 1)
     |
     |      *setopt* can reset some options to their default value, performing the job of
     |      :py:meth:`pycurl.Curl.unsetopt`, if ``None`` is passed
     |      for the option value. The following two calls are equivalent::
     |
     |          c.setopt(c.URL, None)
     |          c.unsetopt(c.URL)
     |
     |      Raises TypeError when the option value is not of a type accepted by the
     |      respective option, and pycurl.error exception when libcurl rejects the
     |      option or its value.
     |
     |      .. _curl_easy_setopt: <https://curl.haxx.se/libcurl/c/curl_easy_setopt.html>
     |
     |  setopt_string(...)
     |      setopt_string(option, value) -> None
     |
     |      Set curl session option to a string value.
     |
     |      This method allows setting string options that are not officially supported
     |      by PycURL, for example because they did not exist when the version of PycURL
     |      being used was released.
     |      :py:meth:`pycurl.Curl.setopt` should be used for setting options that
     |      PycURL knows about.
     |
     |      **Warning:** No checking is performed that *option* does, in fact,
     |      expect a string value. Using this method incorrectly can crash the program
     |      and may lead to a security vulnerability.
     |      Furthermore, it is on the application to ensure that the *value* object
     |      does not get garbage collected while libcurl is using it.
     |      libcurl copies most string options but not all; one option whose value
     |      is not copied by libcurl is `CURLOPT_POSTFIELDS`_.
     |
     |      *option* would generally need to be given as an integer literal rather than
     |      a symbolic constant.
     |
     |      *value* can be a binary string or a Unicode string using ASCII code points,
     |      same as with string options given to PycURL elsewhere.
     |
     |      Example setting URL via ``setopt_string``::
     |
     |          import pycurl
     |          c = pycurl.Curl()
     |          c.setopt_string(10002, "<http://www.python.org/>")
     |
     |      .. _CURLOPT_POSTFIELDS: <https://curl.haxx.se/libcurl/c/CURLOPT_POSTFIELDS.html>
     |
     |  unsetopt(...)
     |      unsetopt(option) -> None
     |
     |      Reset curl session option to its default value.
     |
     |      Only some curl options may be reset via this method.
     |
     |      libcurl does not provide a general way to reset a single option to its default value;
     |      :py:meth:`pycurl.Curl.reset` resets all options to their default values,
     |      otherwise :py:meth:`pycurl.Curl.setopt` must be called with whatever value
     |      is the default. For convenience, PycURL provides this unsetopt method
     |      to reset some of the options to their default values.
     |
     |      Raises pycurl.error exception on failure.
     |
     |      ``c.unsetopt(option)`` is equivalent to ``c.setopt(option, None)``.
     |
     |  ----------------------------------------------------------------------
     |  Static methods defined here:
     |
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.

### class CurlMulti
     |  CurlMulti() -> New CurlMulti object
     |
     |  Creates a new :ref:`curlmultiobject` which corresponds to
     |  a ``CURLM`` handle in libcurl.
     |
     |  Methods defined here:
     |
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |
     |  __getstate__(...)
     |
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |
     |  __setstate__(...)
     |
     |  add_handle(...)
     |      add_handle(Curl object) -> None
     |
     |      Corresponds to `curl_multi_add_handle`_ in libcurl. This method adds an
     |      existing and valid Curl object to the CurlMulti object.
     |
     |      *Changed in version 7.43.0.2:* add_handle now ensures that the Curl object
     |      is not garbage collected while it is being used by a CurlMulti object.
     |      Previously application had to maintain an outstanding reference to the Curl
     |      object to keep it from being garbage collected.
     |
     |      .. _curl_multi_add_handle:
     |          <https://curl.haxx.se/libcurl/c/curl_multi_add_handle.html>
     |
     |  assign(...)
     |      assign(sock_fd, object) -> None
     |
     |      Creates an association in the multi handle between the given socket and
     |      a private object in the application.
     |      Corresponds to `curl_multi_assign`_ in libcurl.
     |
     |      .. _curl_multi_assign: <https://curl.haxx.se/libcurl/c/curl_multi_assign.html>
     |
     |  close(...)
     |      close() -> None
     |
     |      Corresponds to `curl_multi_cleanup`_ in libcurl. This method is
     |      automatically called by pycurl when a CurlMulti object no longer has any
     |      references to it, but can also be called explicitly.
     |
     |      .. _curl_multi_cleanup:
     |          <https://curl.haxx.se/libcurl/c/curl_multi_cleanup.html>
     |
     |  fdset(...)
     |      fdset() -> tuple of lists with active file descriptors, readable, writeable, exceptions
     |
     |      Returns a tuple of three lists that can be passed to the select.select() method.
     |
     |      Corresponds to `curl_multi_fdset`_ in libcurl. This method extracts the
     |      file descriptor information from a CurlMulti object. The returned lists can
     |      be used with the ``select`` module to poll for events.
     |
     |      Example usage::
     |
     |          import pycurl
     |          c = pycurl.Curl()
     |          c.setopt(pycurl.URL, "<https://curl.haxx.se>")
     |          m = pycurl.CurlMulti()
     |          m.add_handle(c)
     |          while 1:
     |              ret, num_handles = m.perform()
     |              if ret != pycurl.E_CALL_MULTI_PERFORM: break
     |          while num_handles:
     |              apply(select.select, m.fdset() + (1,))
     |              while 1:
     |                  ret, num_handles = m.perform()
     |                  if ret != pycurl.E_CALL_MULTI_PERFORM: break
     |
     |      .. _curl_multi_fdset:
     |          <https://curl.haxx.se/libcurl/c/curl_multi_fdset.html>
     |
     |  info_read(...)
     |      info_read([max_objects]) -> tuple(number of queued messages, a list of successful objects, a list of failed objects)
     |
     |      Corresponds to the `curl_multi_info_read`_ function in libcurl.
     |
     |      This method extracts at most *max* messages from the multi stack and returns
     |      them in two lists. The first list contains the handles which completed
     |      successfully and the second list contains a tuple *(curl object, curl error
     |      number, curl error message)* for each failed curl object. The curl error
     |      message is returned as a Python string which is decoded from the curl error
     |      string using the `surrogateescape`_ error handler. The number of
     |      queued messages after this method has been called is also returned.
     |
     |      .. _curl_multi_info_read:
     |          <https://curl.haxx.se/libcurl/c/curl_multi_info_read.html>
     |
     |      .. _surrogateescape:
     |          <https://www.python.org/dev/peps/pep-0383/>
     |
     |  perform(...)
     |      perform() -> tuple of status and the number of active Curl objects
     |
     |      Corresponds to `curl_multi_perform`_ in libcurl.
     |
     |      .. _curl_multi_perform:
     |          <https://curl.haxx.se/libcurl/c/curl_multi_perform.html>
     |
     |  remove_handle(...)
     |      remove_handle(Curl object) -> None
     |
     |      Corresponds to `curl_multi_remove_handle`_ in libcurl. This method
     |      removes an existing and valid Curl object from the CurlMulti object.
     |
     |      .. _curl_multi_remove_handle:
     |          <https://curl.haxx.se/libcurl/c/curl_multi_remove_handle.html>
     |
     |  select(...)
     |      select([timeout]) -> number of ready file descriptors or -1 on timeout
     |
     |      Returns result from doing a select() on the curl multi file descriptor
     |      with the given timeout.
     |
     |      This is a convenience function which simplifies the combined use of
     |      ``fdset()`` and the ``select`` module.
     |
     |      Example usage::
     |
     |          import pycurl
     |          c = pycurl.Curl()
     |          c.setopt(pycurl.URL, "<https://curl.haxx.se>")
     |          m = pycurl.CurlMulti()
     |          m.add_handle(c)
     |          while 1:
     |              ret, num_handles = m.perform()
     |              if ret != pycurl.E_CALL_MULTI_PERFORM: break
     |          while num_handles:
     |              ret = m.select(1.0)
     |              if ret == -1:  continue
     |              while 1:
     |                  ret, num_handles = m.perform()
     |                  if ret != pycurl.E_CALL_MULTI_PERFORM: break
     |
     |  setopt(...)
     |      setopt(option, value) -> None
     |
     |      Set curl multi option. Corresponds to `curl_multi_setopt`_ in libcurl.
     |
     |      *option* specifies which option to set. PycURL defines constants
     |      corresponding to ``CURLMOPT_*`` constants in libcurl, except that
     |      the ``CURLMOPT_`` prefix is replaced with ``M_`` prefix.
     |      For example, ``CURLMOPT_PIPELINING`` is
     |      exposed in PycURL as ``pycurl.M_PIPELINING``. For convenience, ``CURLMOPT_*``
     |      constants are also exposed on CurlMulti objects::
     |
     |          import pycurl
     |          m = pycurl.CurlMulti()
     |          m.setopt(pycurl.M_PIPELINING, 1)
     |          # Same as:
     |          m.setopt(m.M_PIPELINING, 1)
     |
     |      *value* specifies the value to set the option to. Different options accept
     |      values of different types:
     |
     |      - Options specified by `curl_multi_setopt`_ as accepting ``1`` or an
     |        integer value accept Python integers, long integers (on Python 2.x) and
     |        booleans::
     |
     |          m.setopt(pycurl.M_PIPELINING, True)
     |          m.setopt(pycurl.M_PIPELINING, 1)
     |          # Python 2.x only:
     |          m.setopt(pycurl.M_PIPELINING, 1L)
     |
     |      - ``*FUNCTION`` options accept a function. Supported callbacks are
     |        ``CURLMOPT_SOCKETFUNCTION`` AND ``CURLMOPT_TIMERFUNCTION``. Please refer to
     |        the PycURL test suite for examples on using the callbacks.
     |
     |      Raises TypeError when the option value is not of a type accepted by the
     |      respective option, and pycurl.error exception when libcurl rejects the
     |      option or its value.
     |
     |      .. _curl_multi_setopt: <https://curl.haxx.se/libcurl/c/curl_multi_setopt.html>
     |
     |  socket_action(...)
     |      socket_action(sock_fd, ev_bitmask) -> (result, num_running_handles)
     |
     |      Returns result from doing a socket_action() on the curl multi file descriptor
     |      with the given timeout.
     |      Corresponds to `curl_multi_socket_action`_ in libcurl.
     |
     |      The return value is a two-element tuple. The first element is the return
     |      value of the underlying ``curl_multi_socket_action`` function, and it is
     |      always zero (``CURLE_OK``) because any other return value would cause
     |      ``socket_action`` to raise an exception. The second element is the number of
     |      running easy handles within this multi handle. When the number of running
     |      handles reaches zero, all transfers have completed. Note that if the number
     |      of running handles has decreased by one compared to the previous invocation,
     |      this is not mean the handle corresponding to the ``sock_fd`` provided as
     |      the argument to this function was the completed handle.
     |
     |      .. _curl_multi_socket_action: <https://curl.haxx.se/libcurl/c/curl_multi_socket_action.html>
     |
     |  socket_all(...)
     |      socket_all() -> tuple
     |
     |      Returns result from doing a socket_all() on the curl multi file descriptor
     |      with the given timeout.
     |
     |  timeout(...)
     |      timeout() -> int
     |
     |      Returns how long to wait for action before proceeding.
     |      Corresponds to `curl_multi_timeout`_ in libcurl.
     |
     |      .. _curl_multi_timeout: <https://curl.haxx.se/libcurl/c/curl_multi_timeout.html>
     |
     |  ----------------------------------------------------------------------
     |  Static methods defined here:
     |
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.

### class CurlShare
     |  CurlShare() -> New CurlShare object
     |
     |  Creates a new :ref:`curlshareobject` which corresponds to a
     |  ``CURLSH`` handle in libcurl. CurlShare objects is what you pass as an
     |  argument to the SHARE option on :ref:`Curl objects <curlobject>`.
     |
     |  Methods defined here:
     |
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |
     |  __getstate__(...)
     |
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |
     |  __setstate__(...)
     |
     |  close(...)
     |      close() -> None
     |
     |      Close shared handle.
     |
     |      Corresponds to `curl_share_cleanup`_ in libcurl. This method is
     |      automatically called by pycurl when a CurlShare object no longer has
     |      any references to it, but can also be called explicitly.
     |
     |      .. _curl_share_cleanup:
     |          <https://curl.haxx.se/libcurl/c/curl_share_cleanup.html>
     |
     |  setopt(...)
     |      setopt(option, value) -> None
     |
     |      Set curl share option.
     |
     |      Corresponds to `curl_share_setopt`_ in libcurl, where *option* is
     |      specified with the ``CURLSHOPT_*`` constants in libcurl, except that the
     |      ``CURLSHOPT_`` prefix has been changed to ``SH_``. Currently, *value* must be
     |      one of: ``LOCK_DATA_COOKIE``, ``LOCK_DATA_DNS``, ``LOCK_DATA_SSL_SESSION`` or
     |      ``LOCK_DATA_CONNECT``.
     |
     |      Example usage::
     |
     |          import pycurl
     |          curl = pycurl.Curl()
     |          s = pycurl.CurlShare()
     |          s.setopt(pycurl.SH_SHARE, pycurl.LOCK_DATA_COOKIE)
     |          s.setopt(pycurl.SH_SHARE, pycurl.LOCK_DATA_DNS)
     |          curl.setopt(pycurl.URL, '<https://curl.haxx.se>')
     |          curl.setopt(pycurl.SHARE, s)
     |          curl.perform()
     |          curl.close()
     |
     |      Raises pycurl.error exception upon failure.
     |
     |      .. _curl_share_setopt:
     |          <https://curl.haxx.se/libcurl/c/curl_share_setopt.html>
     |
     |  ----------------------------------------------------------------------
     |  Static methods defined here:
     |
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.

### class error
     |  Method resolution order:
     |      error
     |      builtins.Exception
     |      builtins.BaseException
     |      builtins.object
     |
     |  Data descriptors defined here:
     |
     |  __weakref__
     |      list of weak references to the object (if defined)
     |
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.Exception:
     |
     |  __init__(self, /, *args, **kwargs)
     |      Initialize self.  See help(type(self)) for accurate signature.
     |
     |  ----------------------------------------------------------------------
     |  Static methods inherited from builtins.Exception:
     |
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.
     |
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.BaseException:
     |
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |
     |  __reduce__(...)
     |      Helper for pickle.
     |
     |  __repr__(self, /)
     |      Return repr(self).
     |
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |
     |  __setstate__(...)
     |
     |  __str__(self, /)
     |      Return str(self).
     |
     |  with_traceback(...)
     |      Exception.with_traceback(tb) --
     |      set self.__traceback__ to tb and return self.
     |
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from builtins.BaseException:
     |
     |  __cause__
     |      exception cause
     |
     |  __context__
     |      exception context
     |
     |  __dict__
     |
     |  __suppress_context__
     |
     |  __traceback__
     |
     |  args

## FUNCTIONS
### global_cleanup
        global_cleanup() -> None

        Cleanup curl environment.

        Corresponds to `curl_global_cleanup`_ in libcurl.

        .. _curl_global_cleanup: <https://curl.haxx.se/libcurl/c/curl_global_cleanup.html>

### global_init
        global_init(option) -> None

        Initialize curl environment.

        *option* is one of the constants pycurl.GLOBAL_SSL, pycurl.GLOBAL_WIN32,
        pycurl.GLOBAL_ALL, pycurl.GLOBAL_NOTHING, pycurl.GLOBAL_DEFAULT.

        Corresponds to `curl_global_init`_ in libcurl.

        .. _curl_global_init: <https://curl.haxx.se/libcurl/c/curl_global_init.html>

### version_info
        version_info() -> tuple

        Returns a 12-tuple with the version info.

        Corresponds to `curl_version_info`_ in libcurl. Returns a tuple of
        information which is similar to the ``curl_version_info_data`` struct
        returned by ``curl_version_info()`` in libcurl.

        Example usage::

            >>> import pycurl
            >>> pycurl.version_info()
            (3, '7.33.0', 467200, 'amd64-portbld-freebsd9.1', 33436, 'OpenSSL/0.9.8x',
            0, '1.2.7', ('dict', 'file', 'ftp', 'ftps', 'gopher', 'http', 'https',
            'imap', 'imaps', 'pop3', 'pop3s', 'rtsp', 'smtp', 'smtps', 'telnet',
            'tftp'), None, 0, None)

        .. _curl_version_info: <https://curl.haxx.se/libcurl/c/curl_version_info.html>

## DATA
    ACCEPTTIMEOUT_MS = 212
    ACCEPT_ENCODING = 10102
    ADDRESS_SCOPE = 171
    APPCONNECT_TIME = 3145761
    APPEND = 50
    AUTOREFERER = 58
    BUFFERSIZE = 98
    CAINFO = 10065
    CAPATH = 10097
    CLOSESOCKETFUNCTION = 20208
    COMPILE_LIBCURL_VERSION_NUM = 479488
    COMPILE_PY_VERSION_HEX = 50988016
    CONDITION_UNMET = 2097187
    CONNECTTIMEOUT = 78
    CONNECTTIMEOUT_MS = 156
    CONNECT_ONLY = 141
    CONNECT_TIME = 3145733
    CONNECT_TO = 10243
    CONTENT_LENGTH_DOWNLOAD = 3145743
    CONTENT_LENGTH_UPLOAD = 3145744
    CONTENT_TYPE = 1048594
    COOKIE = 10022
    COOKIEFILE = 10031
    COOKIEJAR = 10082
    COOKIELIST = 10135
    COOKIESESSION = 96
    COPYPOSTFIELDS = 10165
    CRLF = 27
    CRLFILE = 10169
    CSELECT_ERR = 4
    CSELECT_IN = 1
    CSELECT_OUT = 2
    CURL_HTTP_VERSION_1_0 = 1
    CURL_HTTP_VERSION_1_1 = 2
    CURL_HTTP_VERSION_2 = 3
    CURL_HTTP_VERSION_2TLS = 4
    CURL_HTTP_VERSION_2_0 = 3
    CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE = 5
    CURL_HTTP_VERSION_LAST = 31
    CURL_HTTP_VERSION_NONE = 0
    CURL_VERSION_ALTSVC = 16777216
    CURL_VERSION_BROTLI = 8388608
    CURL_VERSION_GSASL = 536870912
    CURL_VERSION_HSTS = 268435456
    CURL_VERSION_HTTP3 = 33554432
    CURL_VERSION_HTTPS_PROXY = 2097152
    CURL_VERSION_MULTI_SSL = 4194304
    CURL_VERSION_UNICODE = 134217728
    CURL_VERSION_ZSTD = 67108864
    CUSTOMREQUEST = 10036
    DEBUGFUNCTION = 20094
    DEFAULT_PROTOCOL = 10238
    DIRLISTONLY = 48
    DNS_CACHE_TIMEOUT = 92
    DNS_SERVERS = 10211
    DNS_USE_GLOBAL_CACHE = 91
    DOH_URL = 10279
    EFFECTIVE_URL = 1048577
    EGDSOCKET = 10077
    ENCODING = 10102
    EXPECT_100_TIMEOUT_MS = 227
    E_ABORTED_BY_CALLBACK = 42
    E_AGAIN = 81
    E_ALREADY_COMPLETE = 99999
    E_BAD_CALLING_ORDER = 44
    E_BAD_CONTENT_ENCODING = 61
    E_BAD_DOWNLOAD_RESUME = 36
    E_BAD_FUNCTION_ARGUMENT = 43
    E_BAD_PASSWORD_ENTERED = 46
    E_CALL_MULTI_PERFORM = -1
    E_CHUNK_FAILED = 88
    E_CONV_FAILED = 75
    E_CONV_REQD = 76
    E_COULDNT_CONNECT = 7
    E_COULDNT_RESOLVE_HOST = 6
    E_COULDNT_RESOLVE_PROXY = 5
    E_FAILED_INIT = 2
    E_FILESIZE_EXCEEDED = 63
    E_FILE_COULDNT_READ_FILE = 37
    E_FTP_ACCEPT_FAILED = 10
    E_FTP_ACCEPT_TIMEOUT = 12
    E_FTP_ACCESS_DENIED = 9
    E_FTP_BAD_DOWNLOAD_RESUME = 36
    E_FTP_BAD_FILE_LIST = 87
    E_FTP_CANT_GET_HOST = 15
    E_FTP_CANT_RECONNECT = 16
    E_FTP_COULDNT_GET_SIZE = 32
    E_FTP_COULDNT_RETR_FILE = 19
    E_FTP_COULDNT_SET_ASCII = 29
    E_FTP_COULDNT_SET_BINARY = 17
    E_FTP_COULDNT_SET_TYPE = 17
    E_FTP_COULDNT_STOR_FILE = 25
    E_FTP_COULDNT_USE_REST = 31
    E_FTP_PARTIAL_FILE = 18
    E_FTP_PORT_FAILED = 30
    E_FTP_PRET_FAILED = 84
    E_FTP_QUOTE_ERROR = 21
    E_FTP_SSL_FAILED = 64
    E_FTP_USER_PASSWORD_INCORRECT = 10
    E_FTP_WEIRD_227_FORMAT = 14
    E_FTP_WEIRD_PASS_REPLY = 11
    E_FTP_WEIRD_PASV_REPLY = 13
    E_FTP_WEIRD_SERVER_REPLY = 8
    E_FTP_WEIRD_USER_REPLY = 12
    E_FTP_WRITE_ERROR = 20
    E_FUNCTION_NOT_FOUND = 41
    E_GOT_NOTHING = 52
    E_HTTP2 = 16
    E_HTTP_NOT_FOUND = 22
    E_HTTP_PORT_FAILED = 45
    E_HTTP_POST_ERROR = 34
    E_HTTP_RANGE_ERROR = 33
    E_HTTP_RETURNED_ERROR = 22
    E_INTERFACE_FAILED = 45
    E_LDAP_CANNOT_BIND = 38
    E_LDAP_INVALID_URL = 62
    E_LDAP_SEARCH_FAILED = 39
    E_LIBRARY_NOT_FOUND = 40
    E_LOGIN_DENIED = 67
    E_MALFORMAT_USER = 24
    E_MULTI_ADDED_ALREADY = 7
    E_MULTI_BAD_EASY_HANDLE = 2
    E_MULTI_BAD_HANDLE = 1
    E_MULTI_BAD_SOCKET = 5
    E_MULTI_CALL_MULTI_PERFORM = -1
    E_MULTI_CALL_MULTI_SOCKET = -1
    E_MULTI_INTERNAL_ERROR = 4
    E_MULTI_OK = 0
    E_MULTI_OUT_OF_MEMORY = 3
    E_MULTI_UNKNOWN_OPTION = 6
    E_NOT_BUILT_IN = 4
    E_NO_CONNECTION_AVAILABLE = 89
    E_OK = 0
    E_OPERATION_TIMEDOUT = 28
    E_OPERATION_TIMEOUTED = 28
    E_OUT_OF_MEMORY = 27
    E_PARTIAL_FILE = 18
    E_PEER_FAILED_VERIFICATION = 60
    E_QUOTE_ERROR = 21
    E_RANGE_ERROR = 33
    E_READ_ERROR = 26
    E_RECV_ERROR = 56
    E_REMOTE_ACCESS_DENIED = 9
    E_REMOTE_DISK_FULL = 70
    E_REMOTE_FILE_EXISTS = 73
    E_REMOTE_FILE_NOT_FOUND = 78
    E_RTSP_CSEQ_ERROR = 85
    E_RTSP_SESSION_ERROR = 86
    E_SEND_ERROR = 55
    E_SEND_FAIL_REWIND = 65
    E_SHARE_IN_USE = 57
    E_SSH = 79
    E_SSL_CACERT = 60
    E_SSL_CACERT_BADFILE = 77
    E_SSL_CERTPROBLEM = 58
    E_SSL_CIPHER = 59
    E_SSL_CONNECT_ERROR = 35
    E_SSL_CRL_BADFILE = 82
    E_SSL_ENGINE_INITFAILED = 66
    E_SSL_ENGINE_NOTFOUND = 53
    E_SSL_ENGINE_SETFAILED = 54
    E_SSL_INVALIDCERTSTATUS = 91
    E_SSL_ISSUER_ERROR = 83
    E_SSL_PEER_CERTIFICATE = 60
    E_SSL_PINNEDPUBKEYNOTMATCH = 90
    E_SSL_SHUTDOWN_FAILED = 80
    E_TELNET_OPTION_SYNTAX = 49
    E_TFTP_DISKFULL = 70
    E_TFTP_EXISTS = 73
    E_TFTP_ILLEGAL = 71
    E_TFTP_NOSUCHUSER = 74
    E_TFTP_NOTFOUND = 68
    E_TFTP_PERM = 69
    E_TFTP_UNKNOWNID = 72
    E_TOO_MANY_REDIRECTS = 47
    E_UNKNOWN_OPTION = 48
    E_UNKNOWN_TELNET_OPTION = 48
    E_UNSUPPORTED_PROTOCOL = 1
    E_UPLOAD_FAILED = 25
    E_URL_MALFORMAT = 3
    E_URL_MALFORMAT_USER = 4
    E_USE_SSL_FAILED = 64
    E_WRITE_ERROR = 23
    FAILONERROR = 45
    FILE = 10001
    FOLLOWLOCATION = 52
    FORBID_REUSE = 75
    FORM_BUFFER = 11
    FORM_BUFFERPTR = 12
    FORM_CONTENTS = 4
    FORM_CONTENTTYPE = 14
    FORM_FILE = 10
    FORM_FILENAME = 16
    FRESH_CONNECT = 74
    FTPAPPEND = 50
    FTPAUTH_DEFAULT = 0
    FTPAUTH_SSL = 1
    FTPAUTH_TLS = 2
    FTPLISTONLY = 48
    FTPMETHOD_DEFAULT = 0
    FTPMETHOD_MULTICWD = 1
    FTPMETHOD_NOCWD = 2
    FTPMETHOD_SINGLECWD = 3
    FTPPORT = 10017
    FTPSSLAUTH = 129
    FTPSSL_ALL = 3
    FTPSSL_CONTROL = 2
    FTPSSL_NONE = 0
    FTPSSL_TRY = 1
    FTP_ACCOUNT = 10134
    FTP_ALTERNATIVE_TO_USER = 10147
    FTP_CREATE_MISSING_DIRS = 110
    FTP_ENTRY_PATH = 1048606
    FTP_FILEMETHOD = 138
    FTP_RESPONSE_TIMEOUT = 112
    FTP_SKIP_PASV_IP = 137
    FTP_SSL = 119
    FTP_SSL_CCC = 154
    FTP_USE_EPRT = 106
    FTP_USE_EPSV = 85
    FTP_USE_PRET = 188
    GLOBAL_ACK_EINTR = 4
    GLOBAL_ALL = 3
    GLOBAL_DEFAULT = 3
    GLOBAL_NOTHING = 0
    GLOBAL_SSL = 1
    GLOBAL_WIN32 = 2
    GSSAPI_DELEGATION = 210
    GSSAPI_DELEGATION_FLAG = 2
    GSSAPI_DELEGATION_NONE = 0
    GSSAPI_DELEGATION_POLICY_FLAG = 1
    HAPROXYPROTOCOL = 274
    HEADER = 42
    HEADERFUNCTION = 20079
    HEADEROPT = 229
    HEADER_SEPARATE = 1
    HEADER_SIZE = 2097163
    HEADER_UNIFIED = 0
    HTTP200ALIASES = 10104
    HTTPAUTH = 107
    HTTPAUTH_ANY = -17
    HTTPAUTH_ANYSAFE = -18
    HTTPAUTH_AVAIL = 2097175
    HTTPAUTH_BASIC = 1
    HTTPAUTH_DIGEST = 2
    HTTPAUTH_DIGEST_IE = 16
    HTTPAUTH_GSSNEGOTIATE = 4
    HTTPAUTH_NEGOTIATE = 4
    HTTPAUTH_NONE = 0
    HTTPAUTH_NTLM = 8
    HTTPAUTH_NTLM_WB = 32
    HTTPAUTH_ONLY = 2147483648
    HTTPGET = 80
    HTTPHEADER = 10023
    HTTPPOST = 10024
    HTTPPROXYTUNNEL = 61
    HTTP_CODE = 2097154
    HTTP_CONNECTCODE = 2097174
    HTTP_CONTENT_DECODING = 158
    HTTP_TRANSFER_DECODING = 157
    HTTP_VERSION = 84
    IGNORE_CONTENT_LENGTH = 136
    INFILE = 10009
    INFILESIZE = 30115
    INFILESIZE_LARGE = 30115
    INFOTYPE_DATA_IN = 3
    INFOTYPE_DATA_OUT = 4
    INFOTYPE_HEADER_IN = 1
    INFOTYPE_HEADER_OUT = 2
    INFOTYPE_SSL_DATA_IN = 5
    INFOTYPE_SSL_DATA_OUT = 6
    INFOTYPE_TEXT = 0
    INFO_CERTINFO = 4194338
    INFO_COOKIELIST = 4194332
    INFO_FILETIME = 2097166
    INFO_HTTP_VERSION = 2097198
    INFO_RTSP_CLIENT_CSEQ = 2097189
    INFO_RTSP_CSEQ_RECV = 2097191
    INFO_RTSP_SERVER_CSEQ = 2097190
    INFO_RTSP_SESSION_ID = 1048612
    INTERFACE = 10062
    IOCMD_NOP = 0
    IOCMD_RESTARTREAD = 1
    IOCTLFUNCTION = 20130
    IOE_FAILRESTART = 2
    IOE_OK = 0
    IOE_UNKNOWNCMD = 1
    IPRESOLVE = 113
    IPRESOLVE_V4 = 1
    IPRESOLVE_V6 = 2
    IPRESOLVE_WHATEVER = 0
    ISSUERCERT = 10170
    KEYPASSWD = 10026
    KHMATCH_MISMATCH = 1
    KHMATCH_MISSING = 2
    KHMATCH_OK = 0
    KHSTAT_DEFER = 3
    KHSTAT_FINE = 1
    KHSTAT_FINE_ADD_TO_FILE = 0
    KHSTAT_REJECT = 2
    KHTYPE_DSS = 3
    KHTYPE_RSA = 2
    KHTYPE_RSA1 = 1
    KHTYPE_UNKNOWN = 0
    KRB4LEVEL = 10063
    KRBLEVEL = 10063
    LASTSOCKET = 2097181
    LOCALPORT = 139
    LOCALPORTRANGE = 140
    LOCAL_IP = 1048617
    LOCAL_PORT = 2097194
    LOCK_DATA_CONNECT = 5
    LOCK_DATA_COOKIE = 2
    LOCK_DATA_DNS = 3
    LOCK_DATA_SSL_SESSION = 4
    LOGIN_OPTIONS = 10224
    LOW_SPEED_LIMIT = 19
    LOW_SPEED_TIME = 20
    MAIL_AUTH = 10217
    MAIL_FROM = 10186
    MAIL_RCPT = 10187
    MAXAGE_CONN = 288
    MAXCONNECTS = 71
    MAXFILESIZE = 30117
    MAXFILESIZE_LARGE = 30117
    MAXREDIRS = 68
    MAX_RECV_SPEED_LARGE = 30146
    MAX_SEND_SPEED_LARGE = 30145
    M_CHUNK_LENGTH_PENALTY_SIZE = 30010
    M_CONTENT_LENGTH_PENALTY_SIZE = 30009
    M_MAXCONNECTS = 6
    M_MAX_CONCURRENT_STREAMS = 16
    M_MAX_HOST_CONNECTIONS = 7
    M_MAX_PIPELINE_LENGTH = 8
    M_MAX_TOTAL_CONNECTIONS = 13
    M_PIPELINING = 3
    M_PIPELINING_SERVER_BL = 10012
    M_PIPELINING_SITE_BL = 10011
    M_SOCKETFUNCTION = 20001
    M_TIMERFUNCTION = 20004
    NAMELOOKUP_TIME = 3145732
    NETRC = 51
    NETRC_FILE = 10118
    NETRC_IGNORED = 0
    NETRC_OPTIONAL = 1
    NETRC_REQUIRED = 2
    NEW_DIRECTORY_PERMS = 160
    NEW_FILE_PERMS = 159
    NOBODY = 44
    NOPROGRESS = 43
    NOPROXY = 10177
    NOSIGNAL = 99
    NUM_CONNECTS = 2097178
    OPENSOCKETFUNCTION = 20163
    OPT_CERTINFO = 172
    OPT_COOKIELIST = 10135
    OPT_FILETIME = 69
    OPT_RTSP_CLIENT_CSEQ = 193
    OPT_RTSP_REQUEST = 189
    OPT_RTSP_SERVER_CSEQ = 194
    OPT_RTSP_SESSION_ID = 10190
    OPT_RTSP_STREAM_URI = 10191
    OPT_RTSP_TRANSPORT = 10192
    OS_ERRNO = 2097177
    PASSWORD = 10174
    PATH_AS_IS = 234
    PAUSE_ALL = 5
    PAUSE_CONT = 0
    PAUSE_RECV = 1
    PAUSE_SEND = 4
    PINNEDPUBLICKEY = 10230
    PIPEWAIT = 237
    PIPE_HTTP1 = 1
    PIPE_MULTIPLEX = 2
    PIPE_NOTHING = 0
    POLL_IN = 1
    POLL_INOUT = 3
    POLL_NONE = 0
    POLL_OUT = 2
    POLL_REMOVE = 4
    PORT = 3
    POST = 47
    POST301 = 161
    POSTFIELDS = 10015
    POSTFIELDSIZE = 30120
    POSTFIELDSIZE_LARGE = 30120
    POSTQUOTE = 10039
    POSTREDIR = 161
    PREQUOTE = 10093
    PRETRANSFER_TIME = 3145734
    PRE_PROXY = 10262
    PRIMARY_IP = 1048608
    PRIMARY_PORT = 2097192
    PROGRESSFUNCTION = 20056
    PROTOCOLS = 181
    PROTO_ALL = -1
    PROTO_DICT = 512
    PROTO_FILE = 1024
    PROTO_FTP = 4
    PROTO_FTPS = 8
    PROTO_GOPHER = 33554432
    PROTO_HTTP = 1
    PROTO_HTTPS = 2
    PROTO_IMAP = 4096
    PROTO_IMAPS = 8192
    PROTO_LDAP = 128
    PROTO_LDAPS = 256
    PROTO_POP3 = 16384
    PROTO_POP3S = 32768
    PROTO_RTMP = 524288
    PROTO_RTMPE = 2097152
    PROTO_RTMPS = 8388608
    PROTO_RTMPT = 1048576
    PROTO_RTMPTE = 4194304
    PROTO_RTMPTS = 16777216
    PROTO_RTSP = 262144
    PROTO_SCP = 16
    PROTO_SFTP = 32
    PROTO_SMB = 67108864
    PROTO_SMBS = 134217728
    PROTO_SMTP = 65536
    PROTO_SMTPS = 131072
    PROTO_TELNET = 64
    PROTO_TFTP = 2048
    PROXY = 10004
    PROXYAUTH = 111
    PROXYAUTH_AVAIL = 2097176
    PROXYHEADER = 10228
    PROXYPASSWORD = 10176
    PROXYPORT = 59
    PROXYTYPE = 101
    PROXYTYPE_HTTP = 0
    PROXYTYPE_HTTP_1_0 = 1
    PROXYTYPE_SOCKS4 = 4
    PROXYTYPE_SOCKS4A = 6
    PROXYTYPE_SOCKS5 = 5
    PROXYTYPE_SOCKS5_HOSTNAME = 7
    PROXYUSERNAME = 10175
    PROXYUSERPWD = 10006
    PROXY_CAINFO = 10246
    PROXY_CAPATH = 10247
    PROXY_SERVICE_NAME = 10235
    PROXY_SSLCERT = 10254
    PROXY_SSLCERTTYPE = 10255
    PROXY_SSLKEY = 10256
    PROXY_SSLKEYTYPE = 10257
    PROXY_SSL_VERIFYHOST = 249
    PROXY_SSL_VERIFYPEER = 248
    PROXY_TRANSFER_MODE = 166
    PUT = 54
    QUOTE = 10028
    RANDOM_FILE = 10076
    RANGE = 10007
    READDATA = 10009
    READFUNCTION = 20012
    READFUNC_ABORT = 268435456
    READFUNC_PAUSE = 268435457
    REDIRECT_COUNT = 2097172
    REDIRECT_TIME = 3145747
    REDIRECT_URL = 1048607
    REDIR_POST_301 = 1
    REDIR_POST_302 = 2
    REDIR_POST_303 = 4
    REDIR_POST_ALL = 7
    REDIR_PROTOCOLS = 182
    REFERER = 10016
    REQUEST_SIZE = 2097164
    RESOLVE = 10203
    RESPONSE_CODE = 2097154
    RESUME_FROM = 30116
    RESUME_FROM_LARGE = 30116
    RTSPREQ_ANNOUNCE = 3
    RTSPREQ_DESCRIBE = 2
    RTSPREQ_GET_PARAMETER = 8
    RTSPREQ_LAST = 12
    RTSPREQ_NONE = 0
    RTSPREQ_OPTIONS = 1
    RTSPREQ_PAUSE = 6
    RTSPREQ_PLAY = 5
    RTSPREQ_RECEIVE = 11
    RTSPREQ_RECORD = 10
    RTSPREQ_SETUP = 4
    RTSPREQ_SET_PARAMETER = 9
    RTSPREQ_TEARDOWN = 7
    SASL_IR = 218
    SEEKFUNCTION = 20167
    SEEKFUNC_CANTSEEK = 2
    SEEKFUNC_FAIL = 1
    SEEKFUNC_OK = 0
    SERVICE_NAME = 10236
    SHARE = 10100
    SH_SHARE = 1
    SH_UNSHARE = 2
    SIZE_DOWNLOAD = 3145736
    SIZE_UPLOAD = 3145735
    SOCKET_BAD = -1
    SOCKET_TIMEOUT = -1
    SOCKOPTFUNCTION = 20148
    SOCKOPT_ALREADY_CONNECTED = 2
    SOCKOPT_ERROR = 1
    SOCKOPT_OK = 0
    SOCKS5_GSSAPI_NEC = 180
    SOCKS5_GSSAPI_SERVICE = 10179
    SOCKTYPE_ACCEPT = 1
    SOCKTYPE_IPCXN = 0
    SPEED_DOWNLOAD = 3145737
    SPEED_UPLOAD = 3145738
    SSH_AUTH_AGENT = 16
    SSH_AUTH_ANY = -1
    SSH_AUTH_DEFAULT = -1
    SSH_AUTH_HOST = 4
    SSH_AUTH_KEYBOARD = 8
    SSH_AUTH_NONE = 0
    SSH_AUTH_PASSWORD = 2
    SSH_AUTH_PUBLICKEY = 1
    SSH_AUTH_TYPES = 151
    SSH_HOST_PUBLIC_KEY_MD5 = 10162
    SSH_KEYFUNCTION = 20184
    SSH_KNOWNHOSTS = 10183
    SSH_PRIVATE_KEYFILE = 10153
    SSH_PUBLIC_KEYFILE = 10152
    SSLCERT = 10025
    SSLCERTPASSWD = 10026
    SSLCERTTYPE = 10086
    SSLENGINE = 10089
    SSLENGINE_DEFAULT = 90
    SSLKEY = 10087
    SSLKEYPASSWD = 10026
    SSLKEYTYPE = 10088
    SSLOPT_ALLOW_BEAST = 1
    SSLOPT_NO_REVOKE = 2
    SSLVERSION = 32
    SSLVERSION_DEFAULT = 0
    SSLVERSION_MAX_DEFAULT = 65536
    SSLVERSION_MAX_TLSv1_0 = 262144
    SSLVERSION_MAX_TLSv1_1 = 327680
    SSLVERSION_MAX_TLSv1_2 = 393216
    SSLVERSION_MAX_TLSv1_3 = 458752
    SSLVERSION_SSLv2 = 2
    SSLVERSION_SSLv3 = 3
    SSLVERSION_TLSv1 = 1
    SSLVERSION_TLSv1_0 = 4
    SSLVERSION_TLSv1_1 = 5
    SSLVERSION_TLSv1_2 = 6
    SSLVERSION_TLSv1_3 = 7
    SSL_CIPHER_LIST = 10083
    SSL_ENABLE_ALPN = 226
    SSL_ENABLE_NPN = 225
    SSL_ENGINES = 4194331
    SSL_FALSESTART = 233
    SSL_OPTIONS = 216
    SSL_SESSIONID_CACHE = 150
    SSL_VERIFYHOST = 81
    SSL_VERIFYPEER = 64
    SSL_VERIFYRESULT = 2097165
    SSL_VERIFYSTATUS = 232
    STARTTRANSFER_TIME = 3145745
    STDERR = 10037
    TCP_FASTOPEN = 244
    TCP_KEEPALIVE = 213
    TCP_KEEPIDLE = 214
    TCP_KEEPINTVL = 215
    TCP_NODELAY = 121
    TELNETOPTIONS = 10070
    TFTP_BLKSIZE = 178
    TIMECONDITION = 33
    TIMECONDITION_IFMODSINCE = 1
    TIMECONDITION_IFUNMODSINCE = 2
    TIMECONDITION_LASTMOD = 3
    TIMECONDITION_NONE = 0
    TIMEOUT = 13
    TIMEOUT_MS = 155
    TIMEVALUE = 34
    TLSAUTH_PASSWORD = 10205
    TLSAUTH_TYPE = 10206
    TLSAUTH_USERNAME = 10204
    TOTAL_TIME = 3145731
    TRANSFERTEXT = 53
    TRANSFER_ENCODING = 207
    UNIX_SOCKET_PATH = 10231
    UNRESTRICTED_AUTH = 105
    UPLOAD = 46
    UPLOAD_BUFFERSIZE = 280
    URL = 10002
    USERAGENT = 10018
    USERNAME = 10173
    USERPWD = 10005
    USESSL_ALL = 3
    USESSL_CONTROL = 2
    USESSL_NONE = 0
    USESSL_TRY = 1
    USE_SSL = 119
    VERBOSE = 41
    VERSION_ASYNCHDNS = 128
    VERSION_CONV = 4096
    VERSION_CURLDEBUG = 8192
    VERSION_DEBUG = 64
    VERSION_GSSAPI = 131072
    VERSION_GSSNEGOTIATE = 32
    VERSION_HTTP2 = 65536
    VERSION_IDN = 1024
    VERSION_IPV6 = 1
    VERSION_KERBEROS4 = 2
    VERSION_KERBEROS5 = 262144
    VERSION_LARGEFILE = 512
    VERSION_LIBZ = 8
    VERSION_NTLM = 16
    VERSION_NTLM_WB = 32768
    VERSION_PSL = 1048576
    VERSION_SPNEGO = 256
    VERSION_SSL = 4
    VERSION_SSPI = 2048
    VERSION_TLSAUTH_SRP = 16384
    VERSION_UNIX_SOCKETS = 524288
    WILDCARDMATCH = 197
    WRITEDATA = 10001
    WRITEFUNCTION = 20011
    WRITEFUNC_PAUSE = 268435457
    WRITEHEADER = 10029
    XFERINFOFUNCTION = 20219
    XOAUTH2_BEARER = 10220
    version = 'PycURL/7.44.1 libcurl/7.81.0 GnuTLS/3.7.3 zlib/1...l/zlib n...

## FILE
    /usr/lib/python3/dist-packages/pycurl.cpython-310-x86_64-linux-gnu.so


