{"id":18248063,"url":"https://github.com/nanoninja/httptool","last_synced_at":"2025-10-28T23:41:28.504Z","repository":{"id":57533455,"uuid":"284724667","full_name":"nanoninja/httptool","owner":"nanoninja","description":"Go HTTP Tool Package","archived":false,"fork":false,"pushed_at":"2020-08-04T08:18:41.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-14T15:36:03.506Z","etag":null,"topics":["go","golang","handler","helper","http","middleware","module"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nanoninja.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}},"created_at":"2020-08-03T14:38:25.000Z","updated_at":"2020-08-05T06:18:58.000Z","dependencies_parsed_at":"2022-09-26T18:21:02.155Z","dependency_job_id":null,"html_url":"https://github.com/nanoninja/httptool","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoninja%2Fhttptool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoninja%2Fhttptool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoninja%2Fhttptool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoninja%2Fhttptool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nanoninja","download_url":"https://codeload.github.com/nanoninja/httptool/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247918368,"owners_count":21018038,"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":["go","golang","handler","helper","http","middleware","module"],"created_at":"2024-11-05T09:35:27.151Z","updated_at":"2025-10-28T23:41:28.393Z","avatar_url":"https://github.com/nanoninja.png","language":"Go","readme":"# HTTPTool\n\nThe HTTP tool is a simple extension of the net/http package written in Go.\nIt is not a Framework and offers additional. This package provides a slightly different handling of the Handler type by\nexploiting the return to handle potential errors.\n\nThe ResponseWriter type has been increased to retrieve the state of the HTTP response such as \ncode, length and whether the header has been written.\n\n[![Golang](https://img.shields.io/badge/go-lang-%2347cafa.svg)](https://golang.org/) \n[![Godoc](https://godoc.org/github.com/nanoninja/httptool?status.svg)](https://pkg.go.dev/github.com/nanoninja/httptool?tab=doc) \n[![Build Status](https://travis-ci.org/nanoninja/httptool.svg)](https://travis-ci.org/nanoninja/httptool) \n[![Coverage Status](https://coveralls.io/repos/github/nanoninja/httptool/badge.svg?branch=master)](https://coveralls.io/github/nanoninja/httptool?branch=master) \n[![Go Report Card](https://goreportcard.com/badge/github.com/nanoninja/httptool)](https://goreportcard.com/report/github.com/nanoninja/httptool)\n[![Codebeat Badge](https://codebeat.co/badges/3bf326cc-d733-4af8-b707-e46244e499a9)](https://codebeat.co/projects/github-com-nanoninja-httptool-master)\n\n## Installation\n\n```shell script\ngo get github.com/nanoninja/httptool\n```\n\n## Getting Started\n\n```go\npackage main\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\n\t\"github.com/nanoninja/httptool\"\n)\n\nfunc logAccess(next http.Handler, logger *log.Logger) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tnext.ServeHTTP(w, r)\n\n\t\tip := httptool.ClientIP(r)\n\t\trw := w.(httptool.ResponseWriter)\n\n\t\tlogger.Printf(\"[nanoninja] %s %s %s %d\\n\", ip, r.Method, r.RequestURI, rw.Status())\n\t})\n}\n\nfunc logError(next httptool.HandlerFunc, logger *log.Logger) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tif err := next.ServeHTTP(w, r); err != nil {\n\t\t\tlogger.Println(err)\n\t\t}\n\t}\n}\n\nfunc greeting(w http.ResponseWriter, _ *http.Request) error {\n\tw.WriteHeader(http.StatusOK)\n\n\t_, err := w.Write([]byte(\"Hello, Gophers\"))\n\treturn err\n}\n\nfunc main() {\n\terrLogger := log.New(os.Stderr, \"\", log.Lshortfile)\n\taccessLogger := log.New(os.Stdout, \"\", log.Lshortfile)\n\n\tmux := http.NewServeMux()\n\tmux.Handle(\"/\", logError(greeting, errLogger))\n\n\thandler := logAccess(mux, accessLogger)\n\thandler = httptool.ResponseHandler(handler)\n\thandler = httptool.RecoveryHandler(handler, errLogger)\n\n\tlog.Fatalln(http.ListenAndServe(\":3000\", handler))\n}\n```\n\n## License\n\nHTTPTool is licensed under the Creative Commons Attribution 3.0 License, and code is licensed under a [BSD license](https://github.com/nanoninja/httptool/blob/master/LICENSE).","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanoninja%2Fhttptool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnanoninja%2Fhttptool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanoninja%2Fhttptool/lists"}