Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
64787c7cb0 | |||
b68c93e092 | |||
767b660a22 | |||
6142a1100c | |||
9babe85048 | |||
b59185d56c | |||
1c3a45729b | |||
f5ff99a2a8 | |||
d144bb5a47 |
23
do.go
23
do.go
@ -2,6 +2,7 @@ package ezhttp
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
@ -10,10 +11,28 @@ func Do(req *http.Request) (*http.Response, error) {
|
|||||||
return http.DefaultClient.Do(req)
|
return http.DefaultClient.Do(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseJsonResponse[T any](r io.Reader) (*T, error) {
|
func ParseJsonResponse[T any](resp *http.Response) (*T, error) {
|
||||||
|
if resp.StatusCode/100 != 2 {
|
||||||
|
return nil, fmt.Errorf(
|
||||||
|
"request '%s' returned status code %s\nOutput: %s",
|
||||||
|
resp.Request.URL.String(),
|
||||||
|
resp.Status,
|
||||||
|
ReadAllString(resp.Body),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
res := new(T)
|
res := new(T)
|
||||||
if err := json.NewDecoder(r).Decode(res); err != nil {
|
if err := json.NewDecoder(resp.Body).Decode(res); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ReadAllString(r io.Reader) string {
|
||||||
|
data, err := io.ReadAll(r)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not read response body: %w", err).Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(data)
|
||||||
|
}
|
||||||
|
2
go.mod
2
go.mod
@ -1,3 +1,3 @@
|
|||||||
module git.milar.in/milarin/ezhttp
|
module git.tordarus.net/tordarus/ezhttp
|
||||||
|
|
||||||
go 1.23.0
|
go 1.23.0
|
||||||
|
50
request.go
50
request.go
@ -92,6 +92,17 @@ func Query(keyValuePairs ...string) RequestModifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RemoveQuery(keys ...string) RequestModifier {
|
||||||
|
return func(r *RequestBuilder) *RequestBuilder {
|
||||||
|
q := r.URL.Query()
|
||||||
|
for _, key := range keys {
|
||||||
|
q.Del(key)
|
||||||
|
}
|
||||||
|
r.URL.RawQuery = q.Encode()
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func QueryMap(query map[string]string) RequestModifier {
|
func QueryMap(query map[string]string) RequestModifier {
|
||||||
return func(r *RequestBuilder) *RequestBuilder {
|
return func(r *RequestBuilder) *RequestBuilder {
|
||||||
q := r.URL.Query()
|
q := r.URL.Query()
|
||||||
@ -110,7 +121,7 @@ func Method(method string) RequestModifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Headers(keyValuePairs ...string) RequestModifier {
|
func AddHeaders(keyValuePairs ...string) RequestModifier {
|
||||||
if len(keyValuePairs)%2 != 0 {
|
if len(keyValuePairs)%2 != 0 {
|
||||||
panic("keyValuePairs must have an even length")
|
panic("keyValuePairs must have an even length")
|
||||||
}
|
}
|
||||||
@ -123,7 +134,30 @@ func Headers(keyValuePairs ...string) RequestModifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func HeadersMap(headers map[string]string) RequestModifier {
|
func RemoveHeaders(headers ...string) RequestModifier {
|
||||||
|
return func(r *RequestBuilder) *RequestBuilder {
|
||||||
|
for _, header := range headers {
|
||||||
|
r.Header.Del(header)
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveAllHeaders() RequestModifier {
|
||||||
|
return func(r *RequestBuilder) *RequestBuilder {
|
||||||
|
r.Header = make(http.Header)
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Headers(keyValuePairs ...string) RequestModifier {
|
||||||
|
return chainMods(
|
||||||
|
RemoveAllHeaders(),
|
||||||
|
AddHeaders(keyValuePairs...),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddHeadersMap(headers map[string]string) RequestModifier {
|
||||||
return func(r *RequestBuilder) *RequestBuilder {
|
return func(r *RequestBuilder) *RequestBuilder {
|
||||||
for key, value := range headers {
|
for key, value := range headers {
|
||||||
r.Header.Add(key, value)
|
r.Header.Add(key, value)
|
||||||
@ -132,8 +166,18 @@ func HeadersMap(headers map[string]string) RequestModifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HeadersMap(headers map[string]string) RequestModifier {
|
||||||
|
return chainMods(
|
||||||
|
RemoveAllHeaders(),
|
||||||
|
AddHeadersMap(headers),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func Auth(auth AuthProvider) RequestModifier {
|
func Auth(auth AuthProvider) RequestModifier {
|
||||||
return Headers("Authentication", auth())
|
return chainMods(
|
||||||
|
RemoveHeaders("Authorization"),
|
||||||
|
AddHeaders("Authorization", auth()),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Basic(username, password string) AuthProvider {
|
func Basic(username, password string) AuthProvider {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user