Package: ipfshttpclient4ipwb
py-ipfs-http-clientCheck outthe HTTP Client referencefor the full command reference.Important:TheipfsapiPIP package and Python module have both been renamed toipfshttpclient!
See therelevant section of the READMEfor details.Note:This library occasionally has to change to stay compatible with the IPFS HTTP API.
Currently, this library is tested againstgo-ipfs v0.5.0.
We strive to support the last 5 releases of go-IPFS at any given time; go-IPFS v0.4.21 therefore
being to oldest supported version at this time (version 0.4.20 was never supported due to major
issues in the daemon itself).Table of ContentsInstallUsageDocumentationImportant changes from ipfsapi 0.4.xFeatured ProjectsContributeIRCBug reportsPull requestsLicenseInstallInstall 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('/ip4/127.0.0.1/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>>>api=ipfshttpclient.connect('/dns/ipfs-api.example.com/tcp/443/https',username="foo",password="bar")Pass custom headers to your IPFS api with each request:>>>importipfshttpclient>>>headers={"CustomHeader":"foobar"}>>>api=ipfshttpclient.connect('/dns/ipfs-api.example.com/tcp/443/https',headers=headers)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.Important changes fromipfsapi 0.4.xTons of methods has been renamed, ensure that you code runs without warnings with the last version ofipfsapibefore attempting to upgrade!The Python package has been renamed fromipfsapitoipfshttpclientThe PIP module has been renamed fromipfsapitoipfshttpclient(please update your requirement files)Theclient.*_pyobjfamily of functions has been dropped due to security concernsTheclient.bitswap.unwantmethod has been dropped – it's endpoint has been removed bygo-ipfsTheclient.files.file_lsmethod has been dropped – deprecated for a long time, useclient.lsinsteadPassing a list of parameters toclient.addwill now fail, just pass several individual parameters insteadSome functions that may also return multiple items, will now also return a list when returning only a single item (don't worry about it unless it actually breaks for you)The API deamon location is now described using Multiaddr, hence rather then doingipfshttpclient.connect(host, port)to pass the network address parameters, use:ipfshttpclient.connect("/dns/<host>/tcp/<port>/http")(for hostnames such aslocalhost)ipfshttpclient.connect("/ip4/<IP-address>/tcp/<port>/http")(for IPv4 addresses)ipfshttpclient.connect("/ip6/<IP-address>/tcp/<port>/http")(for IPv6 addresses)Use…/httpsrather then…/httpto connect to the API deamon using HTTPSThe client now supportskeeping session contexts around between API calls, you probably should make use of this facility in your codeThank you @AlibabasMerchant, @lordcirth and @radfish (in order of subjective contributions) for helping making this happen!Featured ProjectsProjects that currently use py-ipfs-http-client. If your project isn't here, feel free to submit a PR to add it!git-remote-ipfsallows users to push and pull git repositories from the IPFS network.InterPlanetary Waybackinterfaces web archive (WARC) files for distributed indexing and replay using IPFS.ContributeChat (IRC/Matrix)You can find us on#py-ipfs on chat.freenode.orgor in ourMatrix chat room. Oin 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.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 formattingcheck:$ tox -e codestyleAnd the unit tests:$ toxYou can arrange to run the code style tests automatically before each commit by
installing apre-commithook:$ ./tools/pre-commit --installPlease make sure to include new unit tests for new features or changes in
behavior. We aim to bring coverage to 100% at some point.LicenseThis code is distributed under the terms of theMIT license.  Details can be found in the fileLICENSEin this repository.