A Gemini protocol client library for Common Lisp. This does not implement a full client, just the core URL retrieval method. It is intended to be used in full clients, or scripts that need to retrieve data via Gemini, such as feed aggregators. https://jfm.carcosa.net
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jason McBrayer add5c4bb15 Don't fail when handed a bare hostname and no path. 3 months ago
roswell Write a script for streaming media directly 6 months ago
LICENSE.md Forgot to add license 10 months ago
README.md Add README 11 months ago
client.lisp Don't fail when handed a bare hostname and no path. 3 months ago
gemini-client.asd Normalize IRIs before doing anything else with them 9 months ago
package.lisp Allow a validation callback (for implementing TOFU) 3 months ago

README.md

CL-GEMINI-CLIENT

This is a very basic Gemini client library for Common Lisp. The interface is basically similar to that of the Drakma HTTP library. This isn’t a complete client; it includes basically only the networking routines you would build an actual client around, and is intended for use in actual clients and scripts such as feed aggregators.

Usage

CL-USER> (defparameter *my-response* (gemini-client:gemini-request
"gemini://medusae.space"))
*MY-RESPONSE*
CL-USER> (gemini-client:response-status *my-response*)
"20"
CL-USER> (gemini-client:response-meta *my-response*)
"text/gemini"

By default, gemini-request reads the whole response into either a string or a vector of bytes, depending on whether the content-type is text or not. You can pass the keyword argument :want-stream to get a binary stream, instead. Redirects will be automatically followed, with a default limit of 5 redirects. You can pass a client certificate in the :client-certificate keyword argument.