Skip to content

pinnaculum/iptt

Repository files navigation

InterPlanetary Tunnel Toolkit

https://gitlab.com/galacteek/iptt/iptt/-/raw/master/media/img/iptt-256.png

Provides tools to communicate with existing network protocols over IPFS tunnels (libp2p streams).

  • iphttp: Command-line iphttp client (supports SSL)
  • iphttpd: iphttp server (can serve aiohttp apps or just forward to an existing HTTP service)
pip install -U iptt

Checkout the documentation here.

iphttp

iphttp is the command-line client. To make a simple GET request, pass the PeerId with the HTTP path. Use --ssl (or -s) to use SSL encryption:

iphttp QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/doc.txt

iphttp -s QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/doc.txt

Use --maddr to pass the RPC API multiaddr of your kubo node (the default multiaddr is /ip4/127.0.0.1/tcp/5001) :

iphttp --maddr /dns4/localhost/tcp/5010 \
    QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/summary.html

Interactive mode: just pass a PeerId and all requests in the CLI session will be based on that peer.

iphttp -i QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc

The following commands are supported in interactive mode:

  • get(path: str, q={}, h={}): HTTP GET request on path path with query q and HTTP headers h (dict)
  • post(path: str, q={}, data={}, h={}): HTTP POST request on path with post data data, HTTP query q (dict) and HTTP headers h (dict)
get('/')
get('/', q={'arg1': 4})
get('/', h={'X-Important-Header': 'some-value'})

post('/form', q={'arg1': 2}, data={'message': 'Form field data'})
post('/form', data={'message': 'Form field data'})

iphttpd

iphttpd allows you to register an IPFS P2P service for an already running HTTP server, and can also serve an HTTP application from a Python module (only aiohttp apps are supported right now).

Example 1

Serve http://localhost:7000 for the P2P protocol /x/ipfs-http/80/1.0

iphttpd -l localhost:80:7080

Example 2

Serve http://localhost:8080 for the P2P protocol /x/ipfs-http/8000/1.0

iphttpd -l localhost:8000:8080

Example 3

Serve an aiohttp application from Python module iphttpd_apps.helloworld:

iphttpd --serve-aiohttp iphttpd_apps.helloworld

Your module should implement the coroutine create_app(args) and return an aiohttp.web.Application instance that will be used to run the service (see the helloworld service).

Example 4

Serve an application with SSL on port 8200:

iphttpd -s --serve-aiohttp iphttpd_apps.helloworld --cert iphttpd.io.pem --key iphttpd.io-key.pem -l localhost:443:8200

Projects using iptt

License

God bless HTTP, and God bless IPFS license.