Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
  • v1.0.0
  • v1.0.1
  • v1.0.2
  • v1.0.3
  • v1.1.0
  • v1.2.0
  • v1.2.1
  • v1.2.2
  • v1.2.3
  • v1.2.4
  • v1.2.5
  • v1.3.0
  • v1.3.1
  • v1.3.2
  • v1.3.3
  • v1.3.4
17 results

Target

Select target project
  • oss/libraries/go/network/http-negotiation
1 result
Select Git revision
  • master
  • v1.0.0
  • v1.0.1
  • v1.0.2
  • v1.0.3
  • v1.1.0
  • v1.2.0
  • v1.2.1
  • v1.2.2
  • v1.2.3
  • v1.2.4
  • v1.2.5
  • v1.3.0
  • v1.3.1
  • v1.3.2
  • v1.3.3
  • v1.3.4
17 results
Show changes
Commits on Source (2)
......@@ -46,6 +46,28 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
```
### Accept Content Type
With the `ContentType` function you can negotiate the content type of HTTP request.
```go
package main
import (
"net/http"
"gitlab.schukai.com/oss/libraries/go/network/http-negotiation"
)
func handleRequest(w http.ResponseWriter, r *http.Request) {
n := negotiation.New(r.Header)
if n.ContentType("application/json") != "" {
// ...
}
}
```
### Language Negotiation
With the `Language` function you can negotiate the language of HTTP request.
......@@ -66,7 +88,6 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
}
}
```
### Charset Negotiation
......@@ -115,6 +136,16 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
```
## Changelog
### 1.1.0
* Add `ContentType` function
### 1.0.0
* Initial release
## Contributing
Merge requests are welcome. For major changes, please open an issue first to discuss what
......
......@@ -14,6 +14,11 @@ func New(header http.Header) *Negotiation {
return &Negotiation{header}
}
func (n *Negotiation) ContentType(acceptance ...string) string {
parser := newHeaderParser(n.header, false)
return parser.selectOffer(acceptance, parser.parse(headerContentType))
}
// Type returns the most preferred content type from the HTTP Accept header.
// If nothing accepted, then empty string is returned.
func (n *Negotiation) Type(offers ...string) (bestOffer string) {
......
......@@ -5,6 +5,24 @@ import (
"testing"
)
func TestContentType(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
n := New(req.Header)
if n.ContentType("application/json") != "application/json" {
t.Errorf("handler returned wrong status code: got %v want %v",
n.Type("application/json"), "application/json")
}
}
func TestNegotiationLanguage(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil)
......
......@@ -5,4 +5,5 @@ const (
headerAcceptLanguage = "Accept-Language"
headerAcceptEncoding = "Accept-Encoding"
headerAcceptCharset = "Accept-Charset"
headerContentType = "Content-Type"
)
{"version":"1.0.3"}
{"version":"1.1.0"}