{"id":33236965,"url":"https://github.com/orthecreedence/carrier","last_synced_at":"2026-03-11T08:34:54.111Z","repository":{"id":23338060,"uuid":"26698529","full_name":"orthecreedence/carrier","owner":"orthecreedence","description":"A lightweight, async HTTP client","archived":false,"fork":false,"pushed_at":"2023-11-27T22:21:05.000Z","size":15,"stargazers_count":43,"open_issues_count":6,"forks_count":9,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-12-21T03:18:50.431Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/orthecreedence.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2014-11-16T00:14:15.000Z","updated_at":"2025-08-03T18:03:16.000Z","dependencies_parsed_at":"2024-01-05T22:13:46.447Z","dependency_job_id":"de2b86a7-38c6-481f-aaf2-af58d5e0bb02","html_url":"https://github.com/orthecreedence/carrier","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/orthecreedence/carrier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orthecreedence%2Fcarrier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orthecreedence%2Fcarrier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orthecreedence%2Fcarrier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orthecreedence%2Fcarrier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orthecreedence","download_url":"https://codeload.github.com/orthecreedence/carrier/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orthecreedence%2Fcarrier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30376309,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T06:09:32.197Z","status":"ssl_error","status_checked_at":"2026-03-11T06:09:17.086Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-11-16T19:00:28.311Z","updated_at":"2026-03-11T08:34:54.089Z","avatar_url":"https://github.com/orthecreedence.png","language":"Common Lisp","funding_links":[],"categories":["Interfaces to other package managers"],"sub_categories":[],"readme":"# Carrier\n\nCarrier is a lightweight, async HTTP client built on top of [cl-async](https://github.com/orthecreedence/cl-async)\nand [fast-http](https://github.com/fukamachi/fast-http).\n\nIts goal is to allow easy and efficient streaming of data over HTTP. It is the\nlightweight cousin to [drakma-async](https://github.com/orthecreedence/drakma-async).\n\n## Documentation\n\n### request (function)\n\n```lisp\n(defun request (url \u0026key (method :get) headers body cookie-jar return-body header-callback body-callback finish-callback (redirect 5) redirect-non-get timeout))\n  =\u003e promise\n```\n\nPerform an HTTP request. Returns a promise (to be used with\n[cl-async-future](https://github.com/orthecreedence/cl-async-future)) that is finished when the\nresponse has fully downloaded.\n\n- `url` - the URL we're requesting.\n- `method` - a keyword method (`:get`, `:post`, etc). Defaults to `:get`.\n- `headers` - a hash table or plist of headers to set with the request. Note\nthat the \"Host\" header is set automatically (if not proveded) and if the `body`\nargument is passed, then \"Content-Length\" is set as well.\n- `body` - A string or byte array to send as the HTTP body. If present, will set\nthe \"Content-Length\" header automatically in the request.\n- `cookie-jar` - A `cl-cookie` `cookie-jar`. Instantiate one with `(make-instance 'cookie:cookie-jar)`\nand pass it on every request on which cookie processing is to be enabled.\n- `return-body` - If T, will store the entire HTTP response body and finish the\nreturned promise with it once complete. If this is left `nil`, then the first\nvalue of the finished promise will be `nil`.\n- `header-callback` - A function that is called once the headers from the\n*response* are fully parsed. The only argument is a hash table of headers.\n```lisp\n(lambda (headers) (gethash \"content-type\" headers))\n```\n- `body-callback` - A function that is called once for each chunk of the HTTP\nresponse body. The function takes three arguments: a byte array, an index\nindicating the start of the chunk in the passed byte array, and an index\nindicating the end of the chunk in the passed byte array. For instance:\n```lisp\n(lambda (chunk start end)\n  ;; here's how you'd get the actual bytes. note that most stream functions\n  ;; take :start and :end functions, so we don't actually have to do a subseq\n  ;; to send the chunk where we need it to go\n  (subseq chunk start end))\n```\n- `finish-callback` - A function of no arguments that is called once the\nresponse is completely finished downloading. This gets called just before the\nreturned promise is finished.\n```lisp\n(lambda () ...)\n```\n- `redirect` - Either nil or an integer value telling Carrier how many redirects\n(if any) to follow before completing. Default is `5`.\n- `redirect-non-get` - This argument determines whether or not we redirect when\nperforming a request other than a `:get` or `:head`. If `t`, we just redirect\nblindly until either we hit our destination *or* the max number of redirects\n(set by the `:redirect` arg) is reached. However, `:redirect-non-get` can also\nbe a function of two arguments (the redirecting URL given in the `Location`\nheader and the response headers hash table).\n```lisp\n(lambda (redirecting-url headers) ...)\n```\n- `timeout` - How many seconds to wait for the socket to start reading. If `nil`\n(the default), uses the OS default.\n\n## License\n\nMIT!!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forthecreedence%2Fcarrier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forthecreedence%2Fcarrier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forthecreedence%2Fcarrier/lists"}