I am trying to publish an IPNS name (i.e. publish an IPFS object to IPNS) using the HTTP API, but I keep getting an error. Documentation link
curl -X POST "http://127.0.0.1:5001/api/v0/name/publish ?arg=’/ipfs/QmZCDSGV7PRJjRb2PFyopKzsU79LgmPo7AziaB89XFXyP3’"
{“Message”:“invalid path “’/ipfs/QmZCDSGV7PRJjRb2PFyopKzsU79LgmPo7AziaB89XFXyP3’”: cid too short”,“Code”:0,“Type”:“error”}
Tried modifying the argument by removing the ‘/ipfs/’ part, but get a different error now.
curl -X POST "http://127.0.0.1:5001/api/v0/name/publish ?arg=‘QmZCDSGV7PRJjRb2PFyopKzsU79LgmPo7AziaB89XFXyP3’"
{“Message”:“invalid path “‘QmZCDSGV7PRJjRb2PFyopKzsU79LgmPo7AziaB89XFXyP3’”: selected encoding not supported”,“Code”:0,“Type”:“error”}
When I use the CLI it works just fine.
ipfs name publish /ipfs/QmZCDSGV7PRJjRb2PFyopKzsU79LgmPo7AziaB89XFXyP3
Published to k51qzi5uqu5dmhtzin0shoviap3jncuk82n0hui6kr1juhhwbigr0535kdlk11: /ipfs/QmZCDSGV7PRJjRb2PFyopKzsU79LgmPo7AziaB89XFXyP3
Couldn’t find anybody talking about this anywhere when I looked online. Any solutions are appreciated!!
Thank you!!
lidel
January 10, 2022, 1:57pm
#2
Quick guess: when creating a URL by hand, do not put single quotes (') around the CID.
@lidel But it says to give it as a string in the documentation
Do you have any other ideas regarding why it may not be working?
Jorropo
January 10, 2022, 2:23pm
#5
A string doesn’t mean “put quotes arround it”.
You need to follow the the url-encoding specs.
Which should be (I belive):
curl -X POST "http://127.0.0.1:5001/api/v0/name/publish?arg=QmZCDSGV7PRJjRb2PFyopKzsU79LgmPo7AziaB89XFXyP3"
Oh oops
It’s working now! Thank you!
1 Like
Jorropo
January 10, 2022, 2:51pm
#7
BTW, when the spec says “string”, that to say about how URL encode special characters.
For example, if you wanted to pin the CID Qm&&& (which isn’t a valid CID but anyway let’s assume it is).
You would need to escape the & because they are control characters (they indicate the next field in an GET sequence).
So you would use: http://127.0.0.1:5001/api/v0/name/publish?arg=Qm%26%26%26.
To automate that process you have thoses functions in python for example:
import urllib
print(urllib.urlencode({"arg": "Qm&&&"})) # -> arg=Qm%26%26%26
1 Like