{"id":44478340,"url":"https://github.com/das-kaesebrot/go-http-client","last_synced_at":"2026-02-12T23:10:21.653Z","repository":{"id":333429217,"uuid":"1129080579","full_name":"das-kaesebrot/go-http-client","owner":"das-kaesebrot","description":"Go HTTP client for benchmarking","archived":false,"fork":false,"pushed_at":"2026-01-19T06:44:46.000Z","size":33,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-19T15:03:51.798Z","etag":null,"topics":["golang","http","http2","http3","quic"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/das-kaesebrot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-06T15:21:40.000Z","updated_at":"2026-01-19T06:44:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/das-kaesebrot/go-http-client","commit_stats":null,"previous_names":["das-kaesebrot/go-http-client"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/das-kaesebrot/go-http-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgo-http-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgo-http-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgo-http-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgo-http-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/das-kaesebrot","download_url":"https://codeload.github.com/das-kaesebrot/go-http-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgo-http-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29385592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T22:07:52.078Z","status":"ssl_error","status_checked_at":"2026-02-12T22:07:49.026Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["golang","http","http2","http3","quic"],"created_at":"2026-02-12T23:10:20.934Z","updated_at":"2026-02-12T23:10:21.648Z","avatar_url":"https://github.com/das-kaesebrot.png","language":"Go","readme":"# go-http-client\nThis is a very simple Go-based HTTP client that supports HTTP/1.1, HTTP/2 and HTTP/3 as well as 0-RTT. I wrote this to be able to benchmark HTTP connections for a project I did at university. Measured data is output in CSV format to `stdout`. General runtime statistics and debug information is printed to `stderr`. Tests are run sequentially.\n\nThe TLS version used for the tests is not negotiated and must be set beforehand. The default value is TLS 1.3.\nUsage with unencrypted connections has not been tested and is not seen as required as this program aims to compare different HTTP versions, some of which can only be used with encryption.\n\nThe columns for the CSV file are:\n`\u003cHTTP version\u003e,\u003citeration\u003e,\u003cmeasured microseconds\u003e,\u003creceived byte\u003e,\u003cbitrate\u003e`.\n\nThe time taken for TLS and TCP handshakes are taken into account during measurements.\n\nThere are two operation modes: with or without the `-k/--keep` flag:\n- with `-k/--keep`, the underlying transport channel (TCP or QUIC) is created once on startup and all tests are measured without the handshake process. The channel is kept open and reused until the loop concludes.\n- without `-k/--keep`, the underlying transport channel is destroyed on every iteration of the loop. This is helpful if you want to measure the TLS/TCP handshakes as well.\n\n## Example\n```bash\nuser@machine:~$ ./http-client \u003e results.csv\nUsing TLS 1.3\nDestroying transport channel on each iteration\nTesting against URL 'https://www.google.com' with HTTP 3\n### STATS ###\nHTTP version: 3\nSuccessful requests: 10/10\nAvg bit rate: 1.42 Mb/s/s\nMean: 98717.80 us\nMedian: 86120.50 us\nMin: 81247 us\nMax: 218036 us\n```\n\n`results.csv`\n\n```csv\n3,1,218036,76271,2798467.704001\n3,2,93730,17618,1503717.910099\n3,3,82025,17567,1713329.546849\n3,4,85690,17557,1639102.083970\n3,5,89337,17543,1570942.585812\n3,6,86973,17579,1616958.071987\n3,7,82271,17496,1701304.164239\n3,8,81318,17572,1728716.648872\n3,9,86551,76216,7044697.401565\n3,10,81247,17512,1724302.009449\n```\n\n## Usage\n```bash\nUsage of http-client:\n  -http int\n    \tThe HTTP protocol version to use (default 3)\n  -i int\n    \tThe amount of iterations to run (shorthand) (default 10)\n  -iterations int\n    \tThe amount of iterations to run (default 10)\n  -k\tKeep the underlying transport channel open\n  -keep\n    \tKeep the underlying transport channel open\n  -o string\n    \tThe output file to write to (empty is stdout) (shorthand)\n  -output string\n    \tThe output file to write to (empty is stdout)\n  -p int\n    \tThe HTTP protocol version to use (shorthand) (default 3)\n  -t string\n    \tThe TLS version to use (forced) (shorthand) (default \"1.3\")\n  -tls string\n    \tThe TLS version to use (forced) (default \"1.3\")\n  -u string\n    \tThe URL to do a GET request against (shorthand) (default \"https://www.google.com\")\n  -url string\n    \tThe URL to do a GET request against (default \"https://www.google.com\")\n  -z\tUse 0-RTT for TLS 1.3 requests\n  -zeroRtt\n    \tUse 0-RTT for TLS 1.3 requests\n```\n\n## Building\n\nEnter the repository root folder and run:\n```bash\nuser@machine:~$ go build .\n```\n\nThis will generate a binary file `http-client` that can be executed independently.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdas-kaesebrot%2Fgo-http-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdas-kaesebrot%2Fgo-http-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdas-kaesebrot%2Fgo-http-client/lists"}