{"id":16922861,"url":"https://github.com/unasuke/curl-http3","last_synced_at":"2025-09-20T05:33:33.871Z","repository":{"id":40652870,"uuid":"362169487","full_name":"unasuke/curl-http3","owner":"unasuke","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-28T11:18:59.000Z","size":31,"stargazers_count":12,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-27T14:44:38.004Z","etag":null,"topics":["curl","docker","http3","quic"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","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/unasuke.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}},"created_at":"2021-04-27T15:53:45.000Z","updated_at":"2024-06-28T11:19:02.000Z","dependencies_parsed_at":"2023-01-31T07:00:40.238Z","dependency_job_id":"5cdf3bb6-c7d2-495e-b049-8f016633e13a","html_url":"https://github.com/unasuke/curl-http3","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unasuke%2Fcurl-http3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unasuke%2Fcurl-http3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unasuke%2Fcurl-http3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unasuke%2Fcurl-http3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unasuke","download_url":"https://codeload.github.com/unasuke/curl-http3/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233634087,"owners_count":18705953,"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":["curl","docker","http3","quic"],"created_at":"2024-10-13T19:56:57.886Z","updated_at":"2025-09-20T05:33:28.535Z","avatar_url":"https://github.com/unasuke.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# curl with HTTP/3\n[![quiche](https://github.com/unasuke/curl-http3/actions/workflows/quiche.yml/badge.svg)](https://github.com/unasuke/curl-http3/actions/workflows/quiche.yml)\n[![ngtcp2](https://github.com/unasuke/curl-http3/actions/workflows/ngtcp2.yml/badge.svg)](https://github.com/unasuke/curl-http3/actions/workflows/ngtcp2.yml)\n[![msh3](https://github.com/unasuke/curl-http3/actions/workflows/msh3.yml/badge.svg)](https://github.com/unasuke/curl-http3/actions/workflows/msh3.yml)\n\n## How to use\n\n### quiche\n\n```shell\n$ docker pull ghcr.io/unasuke/curl-http3:quiche-latest\n$ docker run -it --rm ghcr.io/unasuke/curl-http3:quiche-latest bash\nroot@3e8097861e83:/# curl --http3 -iv https://quic.rocks:4433/ -o /dev/null\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 216.155.158.183:4433...\n*  CAfile: none\n*  CApath: /etc/ssl/certs\n* Connect socket 5 over QUIC to 216.155.158.183:4433\n* Sent QUIC client Initial, ALPN: h3,h3-29,h3-28,h3-27\n  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 2001:19f0:4:34::1:4433...\n* Immediate connect fail for 2001:19f0:4:34::1: Cannot assign requested address\n*  subjectAltName: host \"quic.rocks\" matched cert's \"quic.rocks\"\n* Verified certificate just fine\n* Connected to quic.rocks () port 4433 (#0)\n* h2h3 [:method: GET]\n* h2h3 [:path: /]\n* h2h3 [:scheme: https]\n* h2h3 [:authority: quic.rocks:4433]\n* h2h3 [user-agent: curl/7.83.0-DEV]\n* h2h3 [accept: */*]\n* Using HTTP/3 Stream ID: 0 (easy handle 0x55b0f3699610)\n\u003e GET / HTTP/3\n\u003e Host: quic.rocks:4433\n\u003e user-agent: curl/7.83.0-DEV\n\u003e accept: */*\n\u003e\n\u003c HTTP/3 200\n\u003c content-type: text/html; charset=UTF-8\n\u003c x-original-url: https://quic.rocks/\n\u003c alt-svc: h3=\":4433\"; ma=3600, h3-29=\":4433\"; ma=3600\n\u003c\n{ [164 bytes data]\n100   164    0   164    0     0    198      0 --:--:-- --:--:-- --:--:--   198\n* Connection #0 to host quic.rocks left intact\nroot@3e8097861e83:/#\n```\n\n\n### ngtcp2\n\n```shell\n$ docker pull ghcr.io/unasuke/curl-http3:ngtcp2-latest\n$ docker run -it --rm ghcr.io/unasuke/curl-http3:ngtcp2-latest bash\nroot@2aa5bb20b427:/# curl -iv --http3 https://nghttp2.org:4433 -o /dev/null\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 139.162.123.134:4433...\n* Connect socket 5 over QUIC to 139.162.123.134:4433\n*  CAfile: none\n*  CApath: /etc/ssl/certs\n*  subjectAltName: host \"nghttp2.org\" matched cert's \"nghttp2.org\"\n* Verified certificate just fine\n* Connected to nghttp2.org () port 4433 (#0)\n* h2h3 [:method: GET]\n* h2h3 [:path: /]\n* h2h3 [:scheme: https]\n* h2h3 [:authority: nghttp2.org:4433]\n* h2h3 [user-agent: curl/7.83.0-DEV]\n* h2h3 [accept: */*]\n* Using HTTP/3 Stream ID: 0 (easy handle 0x55f91be2f420)\n\u003e GET / HTTP/3\n\u003e Host: nghttp2.org:4433\n\u003e user-agent: curl/7.83.0-DEV\n\u003e accept: */*\n\u003e\n\u003c HTTP/3 200\n\u003c server: nghttp3/ngtcp2 server\n\u003c content-type: text/html\n\u003c content-length: 6616\n\u003c\n{ [560 bytes data]\n100  6616  100  6616    0     0  30665      0 --:--:-- --:--:-- --:--:-- 30772\n* Connection #0 to host nghttp2.org left intact\nroot@2aa5bb20b427:/#\n```\n\n### msh3 (msquic)\n\n```shell\n$ docker pull ghcr.io/unasuke/curl-http3:msh3-latest\n$ docker run -it --rm ghcr.io/unasuke/curl-http3:msh3-latest bash\nroot@de29ea80bb4a:/# curl --version\ncurl 7.83.0-DEV (x86_64-pc-linux-gnu) libcurl/7.83.0-DEV OpenSSL/3.0.2 msh3/0.0.1\nRelease-Date: [unreleased]\nProtocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp\nFeatures: alt-svc AsynchDNS HSTS HTTP3 HTTPS-proxy IPv6 Largefile NTLM NTLM_WB SSL TLS-SRP UnixSockets\nroot@de29ea80bb4a:/# curl --http3 -iv https://www.google.com -o /dev/null\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 216.58.220.100:443...\n* Connected to www.google.com () port 443 (#0)\n* h2h3 [:method: GET]\n* h2h3 [:path: /]\n* h2h3 [:scheme: https]\n* h2h3 [:authority: www.google.com]\n* h2h3 [user-agent: curl/7.83.0-DEV]\n* h2h3 [accept: */*]\n\u003e GET / HTTP/3\n\u003e Host: www.google.com\n\u003e user-agent: curl/7.83.0-DEV\n\u003e accept: */*\n\u003e\n\u003c HTTP/3 200\n\u003c date: Tue, 26 Apr 2022 07:00:17 GMT\n\u003c expires: -1\n\u003c cache-control: private, max-age=0\n\u003c content-type: text/html; charset=ISO-8859-1\n\u003c p3p: CP=\"This is not a P3P policy! See g.co/p3phelp for more info.\"\n\u003c server: gws\n\u003c x-xss-protection: 0\n\u003c x-frame-options: SAMEORIGIN\n\u003c set-cookie: 1P_JAR=2022-04-26-07; expires=Thu, 26-May-2022 07:00:17 GMT; path=/; domain=.google.com; Secure\n\u003c set-cookie: AEC=AakniGOKhYq9V5UUbcF3SMooYeW5F3yTCrt3baw33K18jbg70gWpxm1ICtc; expires=Sun, 23-Oct-2022 07:00:17 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax\n\u003c set-cookie: NID=511=L4b0cr1RS46tM5HtxgmZ2_vE6kzdlykH55WFsMdWMvBDP6iZ67yW9VcNDvoe8G2YqHienfTF3Gv0sR_fsMuh5M6qmvc-gL_mJPyD3qgIn8oEhivUxJr6UZaGttvwJdhjn2nkOVcde6BSL3oEgJNxIXJzVupKbY26ZQctlQM_RFw; expires=Wed, 26-Oct-2022 07:00:17 GMT; path=/; domain=.google.com; HttpOnly\n\u003c alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"\n\u003c accept-ranges: none\n\u003c vary: Accept-Encoding\n\u003c\n{ [16096 bytes data]\n100 16096    0 16096    0     0  13119      0 --:--:--  0:00:01 --:--:-- 13128\n* Connection #0 to host www.google.com left intact\nroot@de29ea80bb4a:/#\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funasuke%2Fcurl-http3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funasuke%2Fcurl-http3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funasuke%2Fcurl-http3/lists"}