Package: ipfshttpclient
py-ipfs-http-clientCheck outthe HTTP Client referencefor the full command reference.Note: TheipfsapiPIP package and Python module have both been renamed toipfshttpclient!
See therelevant section of the CHANGELOGfor details. There is also aipfsApilibrary from which this library originated that is completely
unmaintained and does not work with any recent go-IPFS version.Note: This library occasionally has to change to stay compatible with the IPFS HTTP API.
Currently, this library is tested againstgo-ipfs v0.7.0.
We strive to support the last 5 releases of go-IPFS at any given time; go-IPFS v0.4.23 therefore
being to oldest supported version at this time.Table of ContentsInstallUsageDocumentationMigrating from 0.4.x to 0.6.0Featured ProjectsContributingBug reportsPull requestsChat with Us (IRC/Matrix)LicenseInstallInstall with pip:pipinstallipfshttpclientDevelopment install from Source# Clone the source repositorygitclonehttps://github.com/ipfs/py-ipfs-http-client.gitcdpy-ipfs-http-client# Link ipfs-api-client into your Python Pathflitinstall--pth-fileUsageBasic use-case (requires a running instance of IPFS daemon):>>>importipfshttpclient>>>client=ipfshttpclient.connect()# Connects to: /dns/localhost/tcp/5001/http>>>res=client.add('test.txt')>>>res{'Hash':'QmWxS5aNTFEc9XbMX1ASvLET1zrqEaTssqt33rVZQCQb22','Name':'test.txt'}>>>client.cat(res['Hash'])'fdsafkljdskafjaksdjf\n'Please note: You should specify the address for an IPFSAPI server, using the address of agateway(such as the publicipfs.ioone at/dns/ipfs.io/tcp/443/https) will only give youextremely limited accessand may not work at all. If you are only interested in downloading IPFS content through public gateway servers then this library is unlikely of being of much help.For real-world scripts you can reuse TCP connections using a context manager or manually closing the session after use:importipfshttpclient# Share TCP connections using a context managerwithipfshttpclient.connect()asclient:hash=client.add('test.txt')['Hash']print(client.stat(hash))# Share TCP connections until the client session is closedclassSomeObject:def__init__(self):self._client=ipfshttpclient.connect(session=True)defdo_something(self):hash=self._client.add('test.txt')['Hash']print(self._client.stat(hash))defclose(self):# Call this when your doneself._client.close()Administrative functions:>>>client.id(){'Addresses':['/ip4/127.0.0.1/tcp/4001/ipfs/QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS','/ip6/::1/tcp/4001/ipfs/QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS'],'AgentVersion':'go-ipfs/0.4.10','ID':'QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS','ProtocolVersion':'ipfs/0.1.0','PublicKey':'CAASpgIwgg ... 3FcjAgMBAAE='}Pass in API options:>>>client.pin.ls(type='all'){'Keys':{'QmNMELyizsfFdNZW3yKTi1SE2pErifwDTXx6vvQBfwcJbU':{'Count':1,'Type':'indirect'},'QmNQ1h6o1xJARvYzwmySPsuv9L5XfzS4WTvJSTAWwYRSd8':{'Count':1,'Type':'indirect'},…Add a directory and match against a filename pattern:>>>client.add('photos',pattern='*.jpg')[{'Hash':'QmcqBstfu5AWpXUqbucwimmWdJbu89qqYmE3WXVktvaXhX','Name':'photos/photo1.jpg'},{'Hash':'QmSbmgg7kYwkSNzGLvWELnw1KthvTAMszN5TNg3XQ799Fu','Name':'photos/photo2.jpg'},{'Hash':'Qma6K85PJ8dN3qWjxgsDNaMjWjTNy8ygUWXH2kfoq9bVxH','Name':'photos/photo3.jpg'}]Or add a directory recursively:>>>client.add('fake_dir',recursive=True)[{'Hash':'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX','Name':'fake_dir/fsdfgh'},{'Hash':'QmNuvmuFeeWWpxjCQwLkHshr8iqhGLWXFzSGzafBeawTTZ','Name':'fake_dir/test2/llllg'},{'Hash':'QmX1dd5DtkgoiYRKaPQPTCtXArUu4jEZ62rJBUcd5WhxAZ','Name':'fake_dir/test2'},{'Hash':'Qmenzb5J4fR9c69BbpbBhPTSp2Snjthu2hKPWGPPJUHb9M','Name':'fake_dir'}]This module also contains some helper functions for adding strings and JSON to IPFS:>>>lst=[1,77,'lol']>>>client.add_json(lst)'QmQ4R5cCUYBWiJpNL7mFe4LDrwD6qBr5Re17BoRAY9VNpd'>>>client.get_json(_)[1,77,'lol']Use an IPFS server with basic auth (replace username and password with real creds):>>>importipfshttpclient>>>client=ipfshttpclient.connect('/dns/ipfs-api.example.com/tcp/443/https',auth=("username","password"))Pass custom headers to the IPFS daemon with each request:>>>importipfshttpclient>>>headers={"CustomHeader":"foobar"}>>>client=ipfshttpclient.connect('/dns/ipfs-api.example.com/tcp/443/https',headers=headers)Connect to the IPFS daemon using a Unix domain socket (plain HTTP only):>>>importipfshttpclient>>>client=ipfshttpclient.connect("/unix/run/ipfs/ipfs.sock")DocumentationDocumentation (currently mostly API documentation unfortunately) is available on IPFS:https://ipfs.io/ipns/12D3KooWEqnTdgqHnkkwarSrJjeMP2ZJiADWLYADaNvUb6SQNyPF/docs/Theipfscommand-line Client documentationmay also be useful in some cases.Migrating from0.4.xto0.6.0Please see the CHANGELOG forthe minor breaking changes between these releases.Featured ProjectsProjects that currently use py-ipfs-http-client. If your project isn't here, feel free to submit a PR to add it!InterPlanetary Waybackinterfaces web archive (WARC) files for distributed indexing and replay using IPFS.ContributingEasy TasksOver time many smaller day-to-day tasks have piled up (mostly supporting some
newer APIs). If want to help out without getting too involved picking up one
of tasks of ourhelp wanted issue listwould go a long way towards making this library more feature-complete. 👍Bug reportsYou can submit bug reports using theGitHub issue tracker.Pull requestsPull requests are welcome.  Before submitting a new pull request, please
make sure that your code passes both thecode formatting(PEP-8 with tab indentation) andtyping(PEP-484 using mypy) checks:$ tox -e styleck -e typeckAs well as the unit tests:$ tox -e py3 -e py3-httpxIf you are unsure, don't hasitate to just submit your code and a human will
take a look. 🙂If you can, Please make sure to include new unit tests for new features or
changes in behavior. We aim to bring coverage to 100% at some point.Installing the pre-commit HookYou can arrange for the code style and typing tests to be run automatically
before each commit by installing the GITpre-commithook:$ ./tools/pre-commit --installChat with Us (IRC/Matrix)You can find us on#py-ipfs on chat.freenode.orgor in ourMatrix chat room.
Join us if you have any suggestions, questions or if you just want to discuss
IPFS and Python in general.Please note that the channel is not monitored all the time and hence you may
only receive a reply to your message later that day. Using Matrix makes it
easier to stay connected in the background, so please prefer the Matrix option
or use an IRC bouncer.LicenseThis code is distributed under the terms of theMIT license.  Details can be found in the fileLICENSEin this repository.