{"id":28184180,"url":"https://github.com/robur-coop/hurl","last_synced_at":"2025-05-16T05:13:16.934Z","repository":{"id":256789430,"uuid":"848479411","full_name":"robur-coop/hurl","owner":"robur-coop","description":"A simple HTTP client for OCaml 5","archived":false,"fork":false,"pushed_at":"2025-04-08T14:41:53.000Z","size":155,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-12T05:58:23.952Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robur-coop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-27T20:49:08.000Z","updated_at":"2025-05-09T03:50:45.000Z","dependencies_parsed_at":"2024-09-13T04:09:36.298Z","dependency_job_id":null,"html_url":"https://github.com/robur-coop/hurl","commit_stats":null,"previous_names":["robur-coop/hurl"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fhurl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fhurl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fhurl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fhurl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robur-coop","download_url":"https://codeload.github.com/robur-coop/hurl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254470971,"owners_count":22076587,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-05-16T05:12:22.369Z","updated_at":"2025-05-16T05:13:16.930Z","avatar_url":"https://github.com/robur-coop.png","language":"OCaml","readme":"# Hurl, a simple command-line HTTP client\n\nHurl is a simple tool used to make HTTP requests (http/1.1 and h2) while\nintrospecting different information such as the chosen IP of the server, the\nTLS configuration chosen between the server and the client as well as the fields\ngiven by the server. It is possible to build a request to submit information via\njson or in the form of a 'multipart-form'. It allows several types of display\nand inflates content if gzip or zlib is used. You can perform a hexdump,\nnormalise the json received or simply display the content as it is. The aim is\nto propose a tool that can be used to debug and interact with an HTTP server by\ndisplaying all the essential information from all the protocols involved in the\ncommunication.\n\nLet's start by installing the software:\n```shell\n$ opam pin add https://github.com/robur-coop/hurl.git\n```\n\nThe hurl software is now installed on your opam and ready to use:\n```shell\n$ hurl https://robur.coop\nHTTP/1.1 200 OK\n\ncontent-type: text/html; charset=utf-8\netag: ----------------------------------------\ncontent-length: 1500\n\n...\n```\n\nYou can change the way the content of the response is displayed. You can\n'hexdump' the content or (if the server informs you that it is json content)\nnormalise the content to json format:\n```shell\n$ hurl http://pie.dev/get\nHTTP/1.1 200 OK\n\nContent-Type: application/json\nContent-Length: 444\nConnection: close\nAccess-Control-Allow-Origin: *\nAccess-Control-Allow-Credentials: true\n\n{\n  \"args\": {},\n  \"headers\": {\n    \"Accept-Encoding\": \"gzip\",\n    \"Connection\": \"Keep-Alive\",\n    \"Content-Length\": \"0\",\n    \"Host\": \"pie.dev\",\n    \"User-Agent\": \"hurl/test\"\n  },\n  \"origin\": \"x.x.x.x\",\n  \"url\": \"http://pie.dev/get\"\n}\n```\n\nInformation such as DNS (the chosen IP address) and TLS can also be displayed:\n```shell\n$ hurl https://robur.coop/ --print=dshb\nA robur.coop:\n  193.30.40.138\n\nTLS 1.3 with AEAD AES128 GCM\n\ncontent-type: text/html; charset=utf-8\netag: ----------------------------------------\ncontent-length: 1500\n\n...\n```\n\nThere are a whole host of options available:\n- use our OCaml implementation for DNS resolution instead of using your system's\n  resolver\n- change the http protocol used\n- specify a certain version of tls\n- specify a resolver like the one at uncensoreddns.org\n- accept certain certificates (such as self-signed ones)\n- modify the header sent to the server\n- add parameters to the URL\n- submit files (via multipart)\n- submit json content\n\nTo do this, we advise you to use the `--help` option, which describes all these\noptions.\n\n## Examples and tests\n\nIf you are interested in such a tool, you can view the tests and use our\n`hurl.srv` server to test the tool.\n","funding_links":[],"categories":["\u003ca name=\"OCaml\"\u003e\u003c/a\u003eOCaml"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobur-coop%2Fhurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobur-coop%2Fhurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobur-coop%2Fhurl/lists"}