Python Simple SOAP Library

Overview

PySimpleSOAP / soap2py

Python simple and lightweight SOAP library for client and server webservices interfaces, aimed to be as small and easy as possible, supporting most common functionality. Initially it was inspired by PHP Soap Extension (mimicking its functionality, simplicity and ease of use), with many advanced features added.

Supports Python 3 (same codebase, no need to run 2to3)

Goals

  • Simple: originally less than 200LOC client/server concrete implementation for easy maintainability and enhancements.
  • Flexible: adapted to several SOAP dialects/servers (Java Axis, .Net, WCF, JBoss, "jetty"), with the possibility of fine-tuning XML request and responses
  • Pythonic: no artifacts, no class generation, no special types, RPC calls parameters and return values are simple python structures (dicts, list, etc.)
  • Dynamic: no definition (WSDL) required, dynamic generation and parsing supported (cached in a pickle file for performance, supporting fixing broken WSDL)
  • Easy: simple xml manipulation, including basic serialization and raw object-like access to SOAP messages
  • Extensible: supports several HTTP wrappers (httplib2, pycurl, urllib2) for special transport needs over SSL and proxy (ISA)
  • WSGI compliant: server dispatcher can be integrated to other python frameworks (web2py, django, etc.)
  • Backwards compatible: stable API, no breaking changes between releases
  • Lightweight: low memory footprint and fast processing (an order of magnitude in some situations, relative to other implementations)

History

Client initially developed for AFIP (Argentina's IRS) web services: electronic invoice, tax bonus, insurance, foreign trade, agriculture, customs, etc. (http://code.google.com/p/pyafipws/wiki/ProjectSummary)

Now it has been extended to support other webservices like Currency Exchange Control and TrazaMed (National Traceability of Medical Drugs Program)

Also, includes Server side support (a generic dispatcher, in order to be exposed from web2py service framework, adaptable to other webservers, including examples for standalone WSGI and django)

Source Code originally available on GoogleCode

Changelog

Recent changes (2014/2015):

  • Plug-in system to support for WSSE (Web-Services Security extensions)
  • WSSE UsernameToken, UsernameDigestToken and BinaryTokenSignature support
  • Pythonic XML Security Library basic implementation (canonicalization, SHA1 hashing and RSA signing / verification using X509 digital certificates)
  • Improved SOAP Fault details
  • Several fixes (basic python3 support, CDATA, )
  • [Breaking] Fixed bugs that occur when dealing with WSDL's that contain nested complex types. Such WSDL's are commonly generated by .NET WCF services that have been developed using "contract first" style where developers define classes with a full inheritance hierarchy that are implicitly converted to WCF soap services. See Issue #42 (https://github.com/pysimplesoap/pysimplesoap/issues/42).

Ongoing efforts:

  • Unit Tests update & clean up (removing old tests, better framework, fixing non-deterministic results, etc.)
  • WSDL advanced support (unifying nested elements structure dialects)
  • Python3 support for WSSE XMLSec (M2Crypto alternatives?)
  • Source code refactoring to improve readability and maintainability
  • Improving interop with .NET WCF services

Previous contributed features (circa 2013, forked and merged back):

  • Corrected support for multiple SOAP ports/bindings
  • Support for both import and include stanzas in WSDL
  • Support for a WSDL base directory to deal with relative pathnames in import/include stanzas
  • Somewhat saner tracing/logging (traces now go to log.debug(), which you can handle per module)
  • Somewhat more readable logic (by removing a bunch of helpers to a separate file)

Testing

Using Python 2.7+:

python -m unittest discover

Using older Python versions:

python -m unittest tests/suite.py

Code coverage:

sudo pip install coverage
coverage run tests/suite.py
coverage report -m
coverage html

Support

For community support, please fell free to fill an issue or send an email to [email protected]. Please do not add comment to wiki pages if you have technical questions.

For priority commercial technical support, you can contact Mariano Reingart (project creator and main maintainer, see AUTHORS for more info).

Comments
  • Problems with Nested ComplexTypes in WSDL

    Problems with Nested ComplexTypes in WSDL

    There are issues interpreting XML schema definitions with nested complex types. It looks like there are multiple different symptoms of this issue, but I am providing a repro of a case where the service wsdl defines a property as an array, yet the PySimpleSoap client sees it as a single object.

    I've been able to reproduce this using .NET WCF services, defined as such:

    classdiagram1

    The relevant schema from the wsdl looks like this:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.datacontract.org/2004/07/ComplexWsdl" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/ComplexWsdl">
        <xs:complexType name="IcedCoffee">
            <xs:complexContent mixed="false">
                <xs:extension base="tns:Coffee">
                    <xs:sequence>
                        <xs:element minOccurs="0" name="IceCubes" type="xs:int" />
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
        <xs:element name="IcedCoffee" nillable="true" type="tns:IcedCoffee" />
        <xs:complexType name="Coffee">
            <xs:complexContent mixed="false">
                <xs:extension base="tns:Beverage">
                    <xs:sequence>
                        <xs:element minOccurs="0" name="Beans" nillable="true" type="tns:ArrayOfCoffeeBean" />
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
        <xs:element name="Coffee" nillable="true" type="tns:Coffee" />
        <xs:complexType name="Beverage">
            <xs:sequence>
                <xs:element minOccurs="0" name="Ingredients" nillable="true" type="tns:ArrayOfIngredient" />
                <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="Beverage" nillable="true" type="tns:Beverage" />
        <xs:complexType name="ArrayOfIngredient">
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" name="Ingredient" nillable="true" type="tns:Ingredient" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="ArrayOfIngredient" nillable="true" type="tns:ArrayOfIngredient" />
        <xs:complexType name="Ingredient">
            <xs:sequence>
                <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="Ingredient" nillable="true" type="tns:Ingredient" />
        <xs:complexType name="ArrayOfCoffeeBean">
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" name="CoffeeBean" nillable="true" type="tns:CoffeeBean" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="ArrayOfCoffeeBean" nillable="true" type="tns:ArrayOfCoffeeBean" />
        <xs:complexType name="CoffeeBean">
            <xs:sequence>
                <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
                <xs:element minOccurs="0" name="Roast" nillable="true" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="CoffeeBean" nillable="true" type="tns:CoffeeBean" />
    </xs:schema>
    

    The PySimpleSoap client is incorrectly interpreting that the Ingredients property as single object of Ingredient:

    Port name: BasicHttpBinding_ICoffeeService
    Operation Name:  SubmitIcedCoffee
    SOAPAction:  http://tempuri.org/ICoffeeService/SubmitIcedCoffee
    Input:  {
        "SubmitIcedCoffee": {
            "icedCoffee": {
                "IceCubes": "<type 'int'>",
                "Beans": [
                    {
                        "CoffeeBean": {
                            "Name": "<type 'str'>",
                            "Roast": "<type 'str'>"
                        }
                    }
                ],
                "Name": "<type 'str'>",
                "Ingredients": {
                    "Ingredient": {
                        "Name": "<type 'str'>"
                    }
                }
            }
        }
    }
    Output:  {'SubmitIcedCoffeeResponse': {u'SubmitIcedCoffeeResult': <type 'bool'>}}
    

    The code for interpreting the wsdl schema types, is defined in the two recursive routines of helpers.py, postprocess_element and process_element. It appears that the postprocess_element function is responsible for interpreting extended classes, yet it is failing to fully process all of the complex types when there is an inheritance hierarchy 3 levels deep.

    There are lots of comments mentioning that the recursion needs to be fixed. If anyone can help or provide any insight on to the issue it would be greatly appreciated!

    opened by dotnetdan 23
  • AttributeError: module httplib2 has no attribute SSLHandshakeError (python3)

    AttributeError: module httplib2 has no attribute SSLHandshakeError (python3)

    Error at python3: AttributeError: module httplib2 has no attribute SSLHandshakeError

    httplib2 at python3 does not support SSLHandshakeError any more.

    So if there was an error at the connection, it does not throws which was the error, pysimplesoap throws an error regarding that httlib2 has no attribute SSLHandshakeError.

    https://github.com/pysimplesoap/pysimplesoap/blob/stable_py3k/pysimplesoap/transport.py#L118

    bug 
    opened by lukio 14
  • Support `nil`s values

    Support `nil`s values

    Parse response <item /> as empty string (None now), and <item xsi:nil="true" /> as None.

    Send <item xsi:nil="true" /> nodes for None values in the request (it drops it out now).

    As usual, tests haven't become worse.

    opened by anton-ryzhov 10
  • Fix posting non-ascii data via httplib[2]

    Fix posting non-ascii data via httplib[2]

    For python2: Headers and http method had been unicode (because of __future__ unicode_literals), but location and body — string (bytes). httplib2 uses httplib inside, httplib tries to concatenate headers and strings, decoding payload bytes with default (ascii) encoder. UnicodeError happened. I've converted all data to string, httplib sends it as is.

    Python3: httplib just works with unicode data everywhere. Everything is OK.

    As usual unittests haven't become worse, but still didn't pass.

    opened by anton-ryzhov 9
  • ssl.SSLError: [SSL: DH_KEY_TOO_SMALL] dh key too small

    ssl.SSLError: [SSL: DH_KEY_TOO_SMALL] dh key too small

    I'm trying to use SoapClient and getting the following error:

    SoapClient(
                wsdl='https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl',
                cache='/home/wendy/GitHub/AgroSoft/afip/cache',
                proxy=None,
                cacert=None,
                timeout=30,
                ns='ser', 
                soap_server=None,
                trace="--trace" in sys.argv)
    
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/pysimplesoap/client.py", line 169, in __init__
        self.services = wsdl and self.wsdl_parse(wsdl, cache=cache)
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/pysimplesoap/client.py", line 861, in wsdl_parse
        wsdl = self._url_to_xml_tree(url, cache, force_download)
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/pysimplesoap/client.py", line 535, in _url_to_xml_tree
        xml = fetch(url, self.http, cache, force_download, self.wsdl_basedir, self.http_headers)
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/pysimplesoap/helpers.py", line 76, in fetch
        response, xml = http.request(url, 'GET', None, headers)
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/httplib2/__init__.py", line 1708, in request
        (response, content) = self._request(
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/httplib2/__init__.py", line 1424, in _request
        (response, content) = self._conn_request(conn, request_uri, method, body, headers)
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/httplib2/__init__.py", line 1346, in _conn_request
        conn.connect()
      File "/home/wendy/GitHub/AgroSoft/venv/lib/python3.8/site-packages/httplib2/__init__.py", line 1138, in connect
        self.sock = self._context.wrap_socket(sock, server_hostname=self.host)
      File "/usr/lib/python3.8/ssl.py", line 500, in wrap_socket
        return self.sslsocket_class._create(
      File "/usr/lib/python3.8/ssl.py", line 1040, in _create
        self.do_handshake()
      File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake
        self._sslobj.do_handshake()
    ssl.SSLError: [SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1123)
    
    

    I'm using Python 3.8.5

    opened by wenscl 6
  • Mejoras varias

    Mejoras varias

    • Estuve corrigiendo algunos tests que no corrían.
    • Actualice el README un poco porque tenía información un poco alejada la realidad de la rama.
    • Agregué un .gitignore, porque al trabajar sobre el proyecto empece a tener pila de archivos sin versionar detectados por git y se hace incomodo trabajar así.

    Haría falta acomodar un poco el tema de los tests y agregar algunos faltantes, principalmente los de client y transport.

    No tengo privilegios para esto, pero estaría bueno meter algún tipo de CI.

    Saludos

    opened by cperezabo 6
  • Sending a call and retrieving the xml output response.

    Sending a call and retrieving the xml output response.

    Because of issues I would like to get the raw response from the call I make in pysimplesoap. That way soap can make the calls and I can manually parse the xml when I need to. Is there a parameter to make that happen or should I create the feature?

    opened by encompass 4
  • Do parse recursive `elements` in schema

    Do parse recursive `elements` in schema

    I didn't get why do you forbid recursive elements parsing in 68ef40e996e034f2f4bb23c0ca4454f10f4d9a60 and 9b07c32261050d897b55d83720fa863ada63f18e . There is no comment, ticket, bug report or testcase.

    I've faced with bug — I have tree structure HumanTaskTypeInfo in my WSDL ( http://pastebin.com/pSn4P4mH ). Current version of pysimplesoap just drops subtask element from schema in parsing step and fails when receives this field from server on second.

    I was really surprised then I've removed described lines — everything had been parsed well, no recursion, executed successfuly. Even unittests didn't report any bugs.

    Pre- 68ef40e996e034f2f4bb23c0ca4454f10f4d9a60 version works good for me too.

    And small fix to my previous PR (about style).

    opened by anton-ryzhov 4
  • Some refactoring for future fixes

    Some refactoring for future fixes

    Hello guys! I'd chosen your library as best available for python and I've started to use it in my project. I've faced with some issues, and going to fix it and make pull-requests. As first step I've made some refactoring — today wsdl_parse is too complex to understand and work with. Looks like I've made no degradation with this fix according to tests.

    I hope you'll like it and further fixes.

    opened by anton-ryzhov 4
  • 1.16.2 seems to be broken

    1.16.2 seems to be broken

    Version 1.16.2 seems to be broken across python2 and -3 and while the previous version was not.

    Traceback (most recent call last):
      File "/home/travis/build/venthur/python-debianbts/test/test_debianbts.py", line 152, in test_bug_log_message_unicode
        buglogs = bts.get_bug_log(773321)
      File "/home/travis/build/venthur/python-debianbts/debianbts/debianbts.py", line 316, in get_bug_log
        reply = _soap_client_call('get_bug_log', nr)
      File "/home/travis/build/venthur/python-debianbts/debianbts/debianbts.py", line 488, in _soap_client_call
        return getattr(soap_client, method_name)(soap_client, *soap_args)
      File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/pysimplesoap/client.py", line 175, in <lambda>
        return lambda *args, **kwargs: self.call(attr, *args, **kwargs)
      File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/pysimplesoap/client.py", line 213, in call
        for k, v in parameters:  # dict: tag=valor
    TypeError: 'SoapClient' object is not iterable
    

    https://travis-ci.org/venthur/python-debianbts/builds/393292840

    opened by venthur 3
  • Drop transitional package (fixes #63 and #101)

    Drop transitional package (fixes #63 and #101)

    New versions of setuptools/pip build wheels by default and cache them. Calling setup() twice breaks wheels. Therefore pysimplesoap is getting increasingly difficult to install for increasing numbers of users. This behaviour was to meant to help users, and is now harming them, so should be removed.

    opened by Jc2k 3
  • Remove inspect for Python 3.11 compatibility

    Remove inspect for Python 3.11 compatibility

    Fixes issue in pyafipws:

    /opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/pysimplesoap/transport.py:[14](https://github.com/reingart/pyafipws/actions/runs/3519199212/jobs/5898894972#step:13:15)1: in <module>
        if 'timeout' in inspect.getargspec(httplib2.Http.__init__)[0]:
    E   AttributeError: module 'inspect' has no attribute 'getargspec'
    
    opened by reingart 0
  • API used successfully in Python 2.7 application does not work in Python 3.6

    API used successfully in Python 2.7 application does not work in Python 3.6

    I have an application written in python 2.7 that uses pysimplesoap successfully. I am in the process of migrating that app to Python 3.6, and have found that the pysimplesoap module is behaving differently in at least one case. Here is a SOAP request sent by the 2.7 application:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://fprint.net/PAC">
    <soapenv:Header/>
    <soapenv:Body>
        <**tns:viewServer**>
            <username>L3cdnc</username><password>[email protected]</password><ServerID>185216</ServerID>
        </**tns:viewServer**>
    </soapenv:Body>
    </soapenv:Envelope>
    

    The next one is what is sent by the python 3 code:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://fprint.net/PAC">\n
    <soapenv:Header/>\n
    <soapenv:Body>
        <**viewServer**>
            <username>L3cdnc</username><password>[email protected]</password><ServerID>212788</ServerID>
        </**viewServer**>
    </soapenv:Body>
    </soapenv:Envelope>
    

    The way the application uses pysimplesoap has not changed. The differences above are in bold. What is causing the ns to not be prepended to the viewServer tag in Python 3, and how can I get around it?

    Thank you.

    opened by dschreyergill 0
  • Why passing unicode string to xml.dom.minidom.parseString? (python2)

    Why passing unicode string to xml.dom.minidom.parseString? (python2)

    Hello, I'm using version 1.16.2 on python2.7. I'm facing problems when requests contain latin digits as à/è/ì/ò/ù. Snipping the request XML with chardet library it seems well encoded in UTF-8. But method do_POST in server.py source file decode the string to unicode before passing it to dispatcher

        def do_POST(self):
            """SOAP POST gateway"""
            request = self.rfile.read(int(self.headers.get('content-length')))
            # convert xml request to unicode (according to request headers)
            if sys.version < '3':
                encoding = self.headers.getparam("charset")
            else:
                encoding = self.headers.get_param("charset")
            request = request.decode(encoding)
            fault = {}
            # execute the method
            response = self.server.dispatcher.dispatch(request, fault=fault)
    

    Inside, the parsing of the request parameter causes an "ExpatError: not well-formed" exception. Since the parser inside is using xml.dom.minidom.parseString according to https://stackoverflow.com/questions/8144131/unicode-error-when-passing-unicode-object-to-xml-parser the string should remain encoded. Commenting the instruction request = request.decode(encoding) in do_POST no exception is raised.

    Why passing unicode string to xml.dom.minidom.parseString?

    Thanks in advance, Roberto

    opened by RobiIhs 0
  • Avoid verify ssl in postprocess

    Avoid verify ssl in postprocess

    I am using your code from https://github.com/reingart/py_efactura_uy/blob/master/consulta_rut.py

    I see the trace and works, data is coming, but after the data comes, the postprocess trows an error.

    Traceback (most recent call last): File "obtenerEmpresaPorRUT.py", line 83, in ret = client.call("AWS_PERSONAGETACTEMPRESARIAL.Execute", param) File "/usr/local/lib/python2.7/dist-packages/pysimplesoap/client.py", line 281, in call self.__headers, soap_uri) File "/usr/local/lib/python2.7/dist-packages/pysimplesoap/wsse.py", line 179, in postprocess raise RuntimeError("WSSE certificate validation failed") RuntimeError: WSSE certificate validation failed

    How can avoid the validation process or put the validation certificate from DGI ?

    is there any attribute for BinaryTokenSignature similar to: verify_cert_client="myfile.crt"; ?

    Regards Juan

    opened by jcav2 0
  • Fix for error due to dictionary key type change from 'list' to 'dict_keys' in python3

    Fix for error due to dictionary key type change from 'list' to 'dict_keys' in python3

    Error occurred while checking whether a dictionary is present in the keys of of another dictionary:

    File "/usr/local/lib/python3.6/site-packages/pysimplesoap/server.py", line 521, in do_get response = self.dispatcher.wsdl() File "/usr/local/lib/python3.6/site-packages/pysimplesoap/server.py", line 395, in wsdl parse_element("%sResponse" % method, returns and returns.items()) File "/usr/local/lib/python3.6/site-packages/pysimplesoap/server.py", line 375, in parse_element if v in TYPE_MAP.keys(): TypeError: unhashable type: 'dict'

    opened by Jyothsnaosper 1
Releases(1.13)
  • 1.13(May 6, 2014)

    Bug fixes:

    • avoid recursive errors while postprocessing wsdl elements
    • references to elements in wsdl parsing
    • updated issues tests
    • commented process_element wsdl helper
    • better support for extension (wsdl parsing)
    • removed unicode literals and fixed print syntax for python3 (tests)
    • fixed pyton3 TypeError: 'dict_keys' object does not support indexing (server)
    • proper unicode conversion of the request in server post method for python3
    Source code(tar.gz)
    Source code(zip)
  • 1.12(May 6, 2014)

    Bug fixes:

    • duration marshalling hack (rollbacked)
    • python 3 compatibility
    • schema and any returned in responses (do not unmarshall)
    • added soap-envelope ns in server
    • set logging level using trace (SoapClient)
    • salesforce wsdl
    • relative paths
    • added support for parameterOrder rpc style
    • better support for rpc style messages
    • input element is missing namespace
    • support basic schema list element (values separated by sapaces)
    • service is not present in wsdl
    • namespace handling at top level parameters in wsdl call
    Source code(tar.gz)
    Source code(zip)
  • 1.11(Jan 21, 2014)

  • 1.10(May 6, 2014)

    Stable release with a lot of clean-ups and accumulated fixes.

    For the detail of around a hundreds of changes, please see the commit history and the list of authors that contributed them.

    Note that this release is slightly backwards incompatible, so please test it carefully.

    Source code(tar.gz)
    Source code(zip)
hackhttp2 make everything easier

hackhttp2 intro This repo is inspired by hackhttp, but it's out of date already. so, I create this repo to make simulation and Network request easier.

youbowen 5 Jun 15, 2022
r - a small subset of Python Requests

r a small subset of Python Requests a few years ago, when I was first learning Python and looking for http functionality, i found the batteries-includ

Gabriel Sroka 4 Dec 15, 2022
HTTP/2 for Python.

Hyper: HTTP/2 Client for Python This project is no longer maintained! Please use an alternative, such as HTTPX or others. We will not publish further

Hyper 1k Dec 23, 2022
🔄 🌐 Handle thousands of HTTP requests, disk writes, and other I/O-bound tasks simultaneously with Python's quintessential async libraries.

🔄 🌐 Handle thousands of HTTP requests, disk writes, and other I/O-bound tasks simultaneously with Python's quintessential async libraries.

Hackers and Slackers 15 Dec 12, 2022
Requests + Gevent = <3

GRequests: Asynchronous Requests GRequests allows you to use Requests with Gevent to make asynchronous HTTP Requests easily. Note: You should probably

Spencer Phillip Young 4.2k Dec 30, 2022
Get the HTTP code of websites along with a cute cat picture

Cat Requests What is this? Cat requests allows you to both get the HTTP response code of the website you wish and it displays it to your screen as a c

Oakchris1955 3 Feb 27, 2022
Pretty fast mass-dmer with multiple tokens support made with python requests

mass-dm-requests - Little preview of the Logger and the Spammer Features Logging User IDS Sending DMs (Embeds are supported) to the logged IDs Includi

karma.meme 14 Nov 18, 2022
curl statistics made simple

httpstat httpstat visualizes curl(1) statistics in a way of beauty and clarity. It is a single file 🌟 Python script that has no dependency 👏 and is

Xiao Meng 5.3k Jan 04, 2023
PycURL - Python interface to libcurl

PycURL -- A Python Interface To The cURL library PycURL is a Python interface to libcurl, the multiprotocol file transfer library. Similarly to the ur

PycURL 933 Jan 09, 2023
Aiohttp simple project with Swagger and ccxt integration

crypto_finder What Where Documentation http://localhost:8899/docs Maintainer nordzisko Crypto Finder aiohttp application Application that connects to

Norbert Danisik 5 Feb 27, 2022
Asynchronous Python HTTP Requests for Humans using Futures

Asynchronous Python HTTP Requests for Humans Small add-on for the python requests http library. Makes use of python 3.2's concurrent.futures or the ba

Ross McFarland 2k Dec 30, 2022
suite de mocks http em json

Ritchie Formula Repo Documentation Contribute to the Ritchie community This repository contains rit formulas which can be executed by the ritchie-cli.

Kaio Fábio Prates Prudêncio 1 Nov 01, 2021
A minimal HTTP client. ⚙️

HTTP Core Do one thing, and do it well. The HTTP Core package provides a minimal low-level HTTP client, which does one thing only. Sending HTTP reques

Encode 306 Dec 27, 2022
Some example code for using a raspberry pi to draw text (including emojis) and twitch emotes to a HUB75 RGB matrix via an HTTP post endpoint.

Some example code for using a raspberry pi to draw text (including emojis) and twitch emotes to a HUB75 RGB matrix via an HTTP post endpoint.

7 Nov 05, 2022
Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more.

urllib3 is a powerful, user-friendly HTTP client for Python. Much of the Python ecosystem already uses urllib3 and you should too. urllib3 brings many

urllib3 3.2k Jan 02, 2023
A toolbelt of useful classes and functions to be used with python-requests

The Requests Toolbelt This is just a collection of utilities for python-requests, but don't really belong in requests proper. The minimum tested reque

892 Jan 06, 2023
Fast HTTP parser

httptools is a Python binding for the nodejs HTTP parser. The package is available on PyPI: pip install httptools. APIs httptools contains two classes

magicstack 1.1k Jan 07, 2023
T-Reqs: A grammar-based HTTP Fuzzer

T-Reqs HTTP Fuzzer T-Reqs (Two Requests) is a grammar-based HTTP Fuzzer written as a part of the paper titled "T-Reqs: HTTP Request Smuggling with Dif

Bahruz Jabiyev 207 Dec 06, 2022
HTTP Request & Response Service, written in Python + Flask.

httpbin(1): HTTP Request & Response Service

Postman Inc. 11.3k Jan 01, 2023
Single-file replacement for python-requests

mureq mureq is a single-file, zero-dependency replacement for python-requests, intended to be vendored in-tree by Linux systems software and other lig

Shivaram Lingamneni 267 Dec 28, 2022