{"id":43956121,"url":"https://github.com/fever-ch/http-ping","last_synced_at":"2026-02-07T04:34:02.990Z","repository":{"id":57638566,"uuid":"430860260","full_name":"fever-ch/http-ping","owner":"fever-ch","description":"http-ping is similar to the usual ping networking utility but instead of working on top of ICMP, it works on top of HTTP/S.","archived":false,"fork":false,"pushed_at":"2024-06-10T23:05:43.000Z","size":270,"stargazers_count":22,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-23T20:11:11.300Z","etag":null,"topics":["http","http-ping","http2","http3","ipv4","ipv6","ping","quic"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fever-ch.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-11-22T20:47:25.000Z","updated_at":"2024-11-03T13:28:10.000Z","dependencies_parsed_at":"2024-06-11T00:41:53.776Z","dependency_job_id":null,"html_url":"https://github.com/fever-ch/http-ping","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/fever-ch/http-ping","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fever-ch%2Fhttp-ping","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fever-ch%2Fhttp-ping/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fever-ch%2Fhttp-ping/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fever-ch%2Fhttp-ping/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fever-ch","download_url":"https://codeload.github.com/fever-ch/http-ping/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fever-ch%2Fhttp-ping/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29186738,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T03:35:06.566Z","status":"ssl_error","status_checked_at":"2026-02-07T03:34:57.604Z","response_time":63,"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":["http","http-ping","http2","http3","ipv4","ipv6","ping","quic"],"created_at":"2026-02-07T04:34:02.909Z","updated_at":"2026-02-07T04:34:02.976Z","avatar_url":"https://github.com/fever-ch.png","language":"Go","readme":"[![Go Report Card](https://goreportcard.com/badge/fever.ch/http-ping)](https://goreportcard.com/report/fever.ch/http-ping)\n[![pr/push checks](https://github.com/fever-ch/http-ping/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/fever-ch/http-ping/actions/workflows/continuous-integration.yml)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=fever-ch_http-ping\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=fever-ch_http-ping)\n[![MIT license](https://img.shields.io/badge/license-Apache-brightgreen.svg)](https://opensource.org/licenses/Apache-2.0)\n![GitHub release (latest by date)](https://img.shields.io/github/v/release/fever-ch/http-ping)\n\n# Http-Ping\n\n`http-ping` is a free software distributed under the [Apache License 2.0](LICENSE).\n\nThis piece of software is similar to the usual [_ping networking\nutility_](https://en.wikipedia.org/wiki/Ping_(networking_utility)) but instead of working on top of ICMP, it works on\ntop of\nHTTP/S.\n\nHttp-Ping is a small, free, easy-to-use command-line utility that probes a given URL and displays relevant statistics.\nIt is similar to the popular ping utility, but works over HTTP/S instead of ICMP, and with a URL instead of a computer\nname/IP address. http-ping supports IPv6 addresses.\n\n## Platforms\n\nThis software is written in [Go](https://go.dev), and should then benefit from\nthe [wide list of targets provided by Go](https://go.dev/doc/install/source#environment).\n\nThis software has been reported to work well on:\n\n- *Linux:* amd64, 386, arm64, arm\n- *FreeBSD:* amd64, 386\n- *Windows:* amd64, 386, arm64\n- *MacOS:* amd64 (Intel Macs), arm64 (Apple Silicon)\n\n## Usage\n\nSimply type `http-ping -h` to get the list of available commands\n\n```\n$ http-ping -h\nAn utility that evaluates the latency and throuput of HTTP/S requests\n\nUsage:\n  http-ping [flags] target-URL\n\nFlags:\n  -a, --audible-bell                  audible ; include a bell (ASCII 0x07) character in the outhroughput when any successful answer is received\n      --auth-password string          authentication password\n      --auth-username string          authentication username\n      --conn-target string            force connection to be done with a specific IP:port (i.e. 127.0.0.1:8080)\n      --cookie string                 add one or more cookies, in the form name=value\n  -c, --count int                     define the number of request to be sent (default unlimited)\n      --detect-versions               detect HTTP protocol versions available on target\n      --disable-compression           the client will not request the remote server to compress answers (hence it might actually do it)\n  -K, --disable-keepalive             disable keep-alive feature\n      --dns-cache                     cache DNS requests\n  -D, --dns-full-resolution           enable full DNS resolution from the root servers\n  -d, --dns-server string             specify an alternate DNS server for resolutions\n  -x, --extra-parameter               extra changing parameter, add an extra changing parameter to the request to avoid being cached by reverse proxy\n  -F, --follow-redirects              follow HTTP redirects (codes 3xx)\n      --head                          perform HTTP HEAD requests instead of GETs\n  -H, --header string                 add one or more header, in the form \"name: value\"\n  -h, --help                          help for http-ping\n  -1, --http1                         use the HTTP/1 protocol\n  -2, --http2                         use the HTTP/2 protocol\n  -3, --http3                         use the HTTP/3 protocol\n  -k, --insecure                      allow insecure server connections when using SSL\n  -i, --interval duration             define the wait time between each request (default 1s)\n  -4, --ipv4                          force IPv4 resolution for dual-stacked sites\n  -6, --ipv6                          force IPv6 resolution for dual-stacked sites\n      --keep-cookies                  keep received cookies between requests\n      --method string                 select a which HTTP method to be used (default \"GET\")\n      --no-server-error               ignore server errors (5xx), do not handle them as \"lost pings\"\n      --parameter string              add one or more parameters to the query, in the form name:value\n  -q, --quiet                         print less details\n      --referrer string               define the referrer\n  -t, --throughput                    log the number of requests done per second\n  -T, --throughput-refresh duration   sampling time for measuring throughput (default 5s)\n      --user-agent string             define a custom user-agent (default \"Http-Ping/(devel) (https://github.com/fever-ch/http-ping)\")\n  -v, --verbose                       print more details\n      --version                       version for http-ping\n  -w, --wait duration                 define the time for a response before timing out (default 10s)\n      --workers int                   define the number of workers to be used (default 1)\n```\n\n### Latency\n\nMeasure the latency with the Google Cloud Zurich region with 4 HTTP pings (`-c 4`):\n\n```\n$ http-ping https://europe-west6-5tkroniexa-oa.a.run.app/api/ping -c 4\nHTTP-PING https://europe-west6-5tkroniexa-oa.a.run.app/api/ping GET\n\n   ─→     server advertised HTTP/3 endpoint, using HTTP/3\n\n       1: HTTP/3.0, 216.239.32.53:443, code=200, size=13 bytes, time=28.4 ms\n       2: HTTP/3.0, 216.239.32.53:443, code=200, size=13 bytes, time=28.9 ms\n       3: HTTP/3.0, 216.239.32.53:443, code=200, size=13 bytes, time=29.5 ms\n       4: HTTP/3.0, 216.239.32.53:443, code=200, size=13 bytes, time=29.5 ms\n\n--- https://europe-west6-5tkroniexa-oa.a.run.app/api/ping ping statistics ---\n4 requests sent, 4 answers received, 0.0% loss\nround-trip min/avg/max/stddev = 28.444/29.094/29.538/0.456 ms\n```\n\nMeasure the latency with Google Cloud Zurich region with ten HTTP pings (`-c 10`), disabling socket reuse (`-K`), using\na HEAD request (`-H`), and in verbose mode (`-v`):\n\n```\n$ http-ping https://europe-west6-5tkroniexa-oa.a.run.app/api/ping -c 10 -K -H --http2 -v\nHTTP-PING https://europe-west6-5tkroniexa-oa.a.run.app/api/ping HEAD\n\n       0: HTTP/2.0, 216.239.36.53:443, code=200, size=0 bytes, time=59.7 ms\n          proto=HTTP/2.0, socket reused=false, compressed=true\n          network i/o: bytes read=4713, bytes written=669\n          tls version=TLS-1.3\n\n          latency contributions:\n            59.7 ms request and response\n                     ├─   39.1 ms connection setup\n                     │             ├─    3.9 ms DNS resolution\n                     │             ├─    9.0 ms TCP handshake\n                     │             └─   26.0 ms TLS handshake\n                     ├─    0.9 ms request sending\n                     ├─   17.3 ms wait\n                     └─    0.2 ms response ingestion\n\n       ...\n\n       9: HTTP/2.0, 216.239.36.53:443, code=200, size=0 bytes, time=53.5 ms\n          proto=HTTP/2.0, socket reused=false, compressed=true\n          network i/o: bytes read=4713, bytes written=669\n          tls version=TLS-1.3\n\n          latency contributions:\n            53.5 ms request and response\n                     ├─   35.2 ms connection setup\n                     │             ├─    3.4 ms DNS resolution\n                     │             ├─    8.7 ms TCP handshake\n                     │             └─   22.9 ms TLS handshake\n                     ├─    0.1 ms request sending\n                     ├─   18.0 ms wait\n                     └─    0.1 ms response ingestion\n                     \n--- https://europe-west6-5tkroniexa-oa.a.run.app/api/ping ping statistics ---\n10 requests sent, 10 answers received, 0.0% loss\nround-trip min/avg/max/stddev = 52.900/56.048/59.653/2.089 ms\n\naverage latency contributions:\n            56.0 ms request and response\n                     ├─   37.7 ms connection setup\n                     │             ├─    3.6 ms DNS resolution\n                     │             ├─    9.5 ms TCP handshake\n                     │             └─   24.5 ms TLS handshake\n                     ├─    0.1 ms request sending\n                     ├─   17.7 ms wait\n                     └─    0.2 ms response ingestion\n```\n\n_note: the latency contribution tree only covers the main steps of the HTTP exchange, thus the sum doesn't fully match._\n\n### Throughput\n\n`http-ping` can also be used to measure the throughput given by an HTTP/S setup.\n\n_Beware, this measure generates, by design, a lot of traffic on the target, thus it might deteriorate the overall\nservice during the time of measurement. This feature is more appropriate when you want to test your own servers._\n\nMeasure the maximum throughput to `URL-TO-TEST` by not waiting between request (`-i 0s`), by enabling throughput\nmeasurement (`-t`) and, by allocating 64 workers (`--workers 64`)\n\n```shell\n\u003e http-ping --workers 64 -i 0s -t URL-TO-TEST\nHTTP-PING URL-TO-TEST GET\n\n          throughput: 1922.0 queries/sec, average latency: 32.6 ms\n          throughput: 2037.6 queries/sec, average latency: 31.4 ms\n          throughput: 1951.0 queries/sec, average latency: 32.8 ms\n          throughput: 2006.9 queries/sec, average latency: 31.8 ms\n          throughput: 1871.5 queries/sec, average latency: 34.1 ms\n^C\n--- URL-TO-TEST ping statistics ---\n50470 requests sent, 50470 answers received, 0.0% loss\nround-trip min/avg/max/stddev = 22.034/32.464/87.484/6.929 ms\n\nthroughput measures:\nqueries throughput min/avg/max/stdev = 1871.5/1957.8/2037.6/59.3 queries/sec  \n```\n\n## Install on Linux\n\nThe [releases](https://github.com/fever-ch/http-ping/releases) are providing packages for the following systems:\n\n- `deb`: Debian, Ubuntu, ...\n- `rpm`: RedHat, CentOS, SuSE, ...\n- `apk`: Alpine\n\nn.b.: _`http-ping` uses `ca-certificates` in order to authenticate the CA signature on the server certificates in\ncommunications over HTTPS._\n\n## Install with Homebrew (Mac/Linux)\n\nA third party repository, [fever-ch/tap](https://www.github.com/fever-ch/homebrew-tap), provides up-to-date formula to\ndeploy `http-ping` easily on platforms supported by [Homebrew](https://brew.sh).\n\nTo install using Brew, run the following command:\n\n```\n$ brew install fever-ch/tap/http-ping\n```\n\n## Install on Linux/FreeBSD/MacOS/Windows\n\nThe [releases](https://github.com/fever-ch/http-ping/releases) page also provides archives that contain the binary\nexecutable file, `tar.gz` files for Linux/FreeBSD/MacOS and `zip` files for Windows.\n\n## Use with Docker\n\n```\n$ docker run --rm feverch/http-ping\n```\n\nNote: images are published as `feverch/http-ping` (Central Docker registry) or `ghcr.io/fever-ch/http-ping` (Github\nContainer registry)\n\n## Build your own binaries\n\nYou can easily build `http-ping`, if `golang` is installed on your system.\n\n```\n$ go install fever.ch/http-ping@latest\n```\n\n## Notes\n\n### HTTP/3 support\n\nHTTP/3 support is brought by a 3rd-party library [QUIC-Go](https://github.com/quic-go/quic-go) which APIs differs a bit\nfrom the Go's HTTP (`net/http`) libraries that are used for HTTP/1 and HTTP/2.\n\nSupport for HTTP/3 came with version `1.2.0`, and still needs to be considered as _experimental_.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffever-ch%2Fhttp-ping","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffever-ch%2Fhttp-ping","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffever-ch%2Fhttp-ping/lists"}