https://github.com/akramarenkov/utr
Library that provides HTTP client operation from the standard library via Unix socket
https://github.com/akramarenkov/utr
go golang http unix-socket
Last synced: 12 months ago
JSON representation
Library that provides HTTP client operation from the standard library via Unix socket
- Host: GitHub
- URL: https://github.com/akramarenkov/utr
- Owner: akramarenkov
- License: mit
- Created: 2025-03-30T05:58:41.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-04-07T06:05:02.000Z (about 1 year ago)
- Last Synced: 2025-04-07T06:32:04.542Z (about 1 year ago)
- Topics: go, golang, http, unix-socket
- Language: Go
- Homepage:
- Size: 84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
# UTR
[](https://pkg.go.dev/github.com/akramarenkov/utr)
[](https://goreportcard.com/report/github.com/akramarenkov/utr)
[](https://coveralls.io/github/akramarenkov/utr)
## Purpose
Library that provides HTTP client operation from the standard library via Unix socket
## Usage
Example:
```go
package main
import (
"bytes"
"context"
"errors"
"fmt"
"io"
"net"
"net/http"
"time"
"github.com/akramarenkov/utr"
)
func main() {
const socketPath = "service.sock"
message := []byte("example message")
var router http.ServeMux
router.HandleFunc(
"/request/path",
func(w http.ResponseWriter, _ *http.Request) {
_, _ = w.Write(message)
},
)
server := &http.Server{
Handler: &router,
ReadTimeout: time.Second,
}
serverErr := make(chan error)
defer close(serverErr)
listener, err := net.Listen("unix", socketPath)
if err != nil {
panic(err)
}
defer func() {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
fmt.Println("Server shutdown error:", err)
}
if err := <-serverErr; !errors.Is(err, http.ErrServerClosed) {
fmt.Println("Server has terminated abnormally:", err)
}
}()
go func() {
serverErr <- server.Serve(listener)
}()
var keeper utr.Keeper
transport, err := utr.New(&keeper, http.DefaultTransport)
if err != nil {
panic(err)
}
if err := keeper.AddPath("service", socketPath); err != nil {
panic(err)
}
http.DefaultClient.Transport = transport
resp, err := http.Get("http+unix://service/request/path")
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response status code:", resp.StatusCode)
received, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(
"Is message sent by server equal to message received by client:",
bytes.Equal(received, message),
)
// Output:
// Response status code: 200
// Is message sent by server equal to message received by client: true
}
```