本文整理汇总了Golang中net/http.Header函数的典型用法代码示例。如果您正苦于以下问题:Golang Header函数的具体用法?Golang Header怎么用?Golang Header使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Header函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: buildTestRequest
func buildTestRequest(method string, path string, body string, headers map[string][]string, cookies []*http.Cookie) *http.Request {
host := "127.0.0.1"
port := "80"
rawurl := "http://" + host + ":" + port + path
url_, _ := url.Parse(rawurl)
proto := "HTTP/1.1"
if headers == nil {
headers = map[string][]string{}
}
headers["User-Agent"] = []string{"web.go test"}
if method == "POST" {
headers["Content-Length"] = []string{fmt.Sprintf("%d", len(body))}
if headers["Content-Type"] == nil {
headers["Content-Type"] = []string{"text/plain"}
}
}
req := http.Request{Method: method,
URL: url_,
Proto: proto,
Host: host,
Header: http.Header(headers),
Body: ioutil.NopCloser(bytes.NewBufferString(body)),
}
for _, cookie := range cookies {
req.AddCookie(cookie)
}
return &req
}
示例2: handler
func handler(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "text/html; charset=utf-8")
segs := strings.Split(strings.Trim(req.URL.Path, "/\\"), "/")
if len(segs) < 2 {
http.NotFound(res, req)
return
}
params := []reflect.Value{}
if len(segs) > 2 {
for _, param := range segs[2:3] {
params = append(params, reflect.ValueOf(param))
}
} else {
params = append(params, reflect.ValueOf("Campari"))
}
switch segs[0] {
case "welcome":
controller := controllers.Welcome{res, req}
action := helpers.Capitalize(segs[1])
method := reflect.ValueOf(&controller).MethodByName(action)
if method.IsValid() {
method.Call(params)
} else {
http.NotFound(res, req)
}
break
default:
http.NotFound(res, req)
}
}
示例3: readTrailer
func (b *body) readTrailer() error {
// The common case, since nobody uses trailers.
buf, _ := b.r.Peek(2)
if bytes.Equal(buf, singleCRLF) {
b.r.ReadByte()
b.r.ReadByte()
return nil
}
// Make sure there's a header terminator coming up, to prevent
// a DoS with an unbounded size Trailer. It's not easy to
// slip in a LimitReader here, as textproto.NewReader requires
// a concrete *bufio.Reader. Also, we can't get all the way
// back up to our conn's LimitedReader that *might* be backing
// this bufio.Reader. Instead, a hack: we iteratively Peek up
// to the bufio.Reader's max size, looking for a double CRLF.
// This limits the trailer to the underlying buffer size, typically 4kB.
if !seeUpcomingDoubleCRLF(b.r) {
return errors.New("http: suspiciously long trailer after chunked body")
}
hdr, err := textproto.NewReader(b.r).ReadMIMEHeader()
if err != nil {
return err
}
switch rr := b.hdr.(type) {
case *http.Request:
rr.Trailer = http.Header(hdr)
case *http.Response:
rr.Trailer = http.Header(hdr)
}
return nil
}
示例4: TestResponseContentTypeInvalid
func TestResponseContentTypeInvalid(t *testing.T) {
reporter := newMockReporter(t)
headers1 := map[string][]string{
"Content-Type": {";"},
}
headers2 := map[string][]string{
"Content-Type": {"charset=utf-8"},
}
resp1 := NewResponse(reporter, &http.Response{
Header: http.Header(headers1),
})
resp2 := NewResponse(reporter, &http.Response{
Header: http.Header(headers2),
})
resp1.ContentType("")
resp1.chain.assertFailed(t)
resp1.chain.reset()
resp1.ContentType("", "")
resp1.chain.assertFailed(t)
resp1.chain.reset()
resp2.ContentType("")
resp2.chain.assertFailed(t)
resp2.chain.reset()
resp2.ContentType("", "")
resp2.chain.assertFailed(t)
resp2.chain.reset()
}
示例5: TestRemoveSingleHopHeaders
func TestRemoveSingleHopHeaders(t *testing.T) {
hdr := http.Header(map[string][]string{
// single-hop headers that should be removed
"Connection": []string{"close"},
"Keep-Alive": []string{"foo"},
"Proxy-Authenticate": []string{"Basic realm=example.com"},
"Proxy-Authorization": []string{"foo"},
"Te": []string{"deflate,gzip"},
"Trailers": []string{"ETag"},
"Transfer-Encoding": []string{"chunked"},
"Upgrade": []string{"WebSocket"},
// headers that should persist
"Accept": []string{"application/json"},
"X-Foo": []string{"Bar"},
})
removeSingleHopHeaders(&hdr)
want := http.Header(map[string][]string{
"Accept": []string{"application/json"},
"X-Foo": []string{"Bar"},
})
if !reflect.DeepEqual(want, hdr) {
t.Fatalf("unexpected result: want = %#v, got = %#v", want, hdr)
}
}
示例6: noConfusion
func noConfusion(res http.ResponseWriter, req *http.Request) {
var html string
if req.Method == "POST" {
// get cookie value
cookie, _ := req.Cookie("session-id")
id := ???
if cookie != nil {
html += `
<br>
<p>Value from cookie: ` + id + `</p>
`
}
// get memcache value
ctx := appengine.NewContext(req)
item, _ := memcache.Get(ctx, id)
if item != nil {
html += `
<br>
<p>
Value from memcache: ` + string(item.Value) + `
</p>
`
}
}
res.Header().Set("Content-Type", "text/html; charset=utf-8")
fmt.Fprint(res, html)
}s
示例7: tarGzHandler
func tarGzHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
files := vars["files"]
tarfilename := fmt.Sprintf("transfersh-%d.tar.gz", uint16(time.Now().UnixNano()))
w.Header().Set("Content-Type", "application/x-gzip")
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", tarfilename))
w.Header().Set("Connection", "close")
os := gzip.NewWriter(w)
defer os.Close()
zw := tar.NewWriter(os)
defer zw.Close()
for _, key := range strings.Split(files, ",") {
if strings.HasPrefix(key, "/") {
key = key[1:]
}
key = strings.Replace(key, "\\", "/", -1)
token := strings.Split(key, "/")[0]
filename := sanitize.Path(strings.Split(key, "/")[1])
reader, _, contentLength, err := storage.Get(token, filename)
if err != nil {
if err.Error() == "The specified key does not exist." {
http.Error(w, "File not found", 404)
return
} else {
log.Printf("%s", err.Error())
http.Error(w, "Could not retrieve file.", 500)
return
}
}
defer reader.Close()
header := &tar.Header{
Name: strings.Split(key, "/")[1],
Size: int64(contentLength),
}
err = zw.WriteHeader(header)
if err != nil {
log.Printf("%s", err.Error())
http.Error(w, "Internal server error.", 500)
return
}
if _, err = io.Copy(zw, reader); err != nil {
log.Printf("%s", err.Error())
http.Error(w, "Internal server error.", 500)
return
}
}
}
示例8: addTestManifest
func addTestManifest(repo reference.Named, reference string, mediatype string, content []byte, m *testutil.RequestResponseMap) {
*m = append(*m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "GET",
Route: "/v2/" + repo.Name() + "/manifests/" + reference,
},
Response: testutil.Response{
StatusCode: http.StatusOK,
Body: content,
Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
"Content-Type": {mediatype},
"Docker-Content-Digest": {contentDigestString(mediatype, content)},
}),
},
})
*m = append(*m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "HEAD",
Route: "/v2/" + repo.Name() + "/manifests/" + reference,
},
Response: testutil.Response{
StatusCode: http.StatusOK,
Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
"Content-Type": {mediatype},
"Docker-Content-Digest": {digest.Canonical.FromBytes(content).String()},
}),
},
})
}
示例9: addTestManifestWithEtag
func addTestManifestWithEtag(repo, reference string, content []byte, m *testutil.RequestResponseMap, dgst string) {
actualDigest, _ := digest.FromBytes(content)
getReqWithEtag := testutil.Request{
Method: "GET",
Route: "/v2/" + repo + "/manifests/" + reference,
Headers: http.Header(map[string][]string{
"If-None-Match": {fmt.Sprintf(`"%s"`, dgst)},
}),
}
var getRespWithEtag testutil.Response
if actualDigest.String() == dgst {
getRespWithEtag = testutil.Response{
StatusCode: http.StatusNotModified,
Body: []byte{},
Headers: http.Header(map[string][]string{
"Content-Length": {"0"},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
}),
}
} else {
getRespWithEtag = testutil.Response{
StatusCode: http.StatusOK,
Body: content,
Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
}),
}
}
*m = append(*m, testutil.RequestResponseMapping{Request: getReqWithEtag, Response: getRespWithEtag})
}
示例10: addTestManifest
func addTestManifest(repo, reference string, content []byte, m *testutil.RequestResponseMap) {
*m = append(*m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "GET",
Route: "/v2/" + repo + "/manifests/" + reference,
},
Response: testutil.Response{
StatusCode: http.StatusOK,
Body: content,
Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
}),
},
})
*m = append(*m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "HEAD",
Route: "/v2/" + repo + "/manifests/" + reference,
},
Response: testutil.Response{
StatusCode: http.StatusOK,
Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
}),
},
})
}
示例11: TestBlobMount
func TestBlobMount(t *testing.T) {
dgst, content := newRandomBlob(1024)
var m testutil.RequestResponseMap
repo := "test.example.com/uploadrepo"
sourceRepo := "test.example.com/sourcerepo"
m = append(m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "POST",
Route: "/v2/" + repo + "/blobs/uploads/",
QueryParams: map[string][]string{"from": {sourceRepo}, "mount": {dgst.String()}},
},
Response: testutil.Response{
StatusCode: http.StatusCreated,
Headers: http.Header(map[string][]string{
"Content-Length": {"0"},
"Location": {"/v2/" + repo + "/blobs/" + dgst.String()},
"Docker-Content-Digest": {dgst.String()},
}),
},
})
m = append(m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "HEAD",
Route: "/v2/" + repo + "/blobs/" + dgst.String(),
},
Response: testutil.Response{
StatusCode: http.StatusOK,
Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
}),
},
})
e, c := testServer(m)
defer c()
ctx := context.Background()
r, err := NewRepository(ctx, repo, e, nil)
if err != nil {
t.Fatal(err)
}
l := r.Blobs(ctx)
stat, err := l.Mount(ctx, sourceRepo, dgst)
if err != nil {
t.Fatal(err)
}
if stat.Digest != dgst {
t.Fatalf("Unexpected digest: %s, expected %s", stat.Digest, dgst)
}
}
示例12: gamepage
func gamepage(w http.ResponseWriter, r *http.Request) {
cookie, _ := r.Cookie("Spanzhash")
if(hashExists(cookie.Name))
data, err := ioutil.ReadFile("./layouts/gamepage.html")
if err==nil {
w.Header().Add("Content-Type","text/html")
w.Write(data)
} else {
w.WriteHeader(404)
w.Write([]byte("404 Page not found - "+http.StatusText(404)))
}
}
示例13: TestBlobExistsNoContentLength
func TestBlobExistsNoContentLength(t *testing.T) {
var m testutil.RequestResponseMap
repo, _ := reference.ParseNamed("biff")
dgst, content := newRandomBlob(1024)
m = append(m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "GET",
Route: "/v2/" + repo.Name() + "/blobs/" + dgst.String(),
},
Response: testutil.Response{
StatusCode: http.StatusOK,
Body: content,
Headers: http.Header(map[string][]string{
// "Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
}),
},
})
m = append(m, testutil.RequestResponseMapping{
Request: testutil.Request{
Method: "HEAD",
Route: "/v2/" + repo.Name() + "/blobs/" + dgst.String(),
},
Response: testutil.Response{
StatusCode: http.StatusOK,
Headers: http.Header(map[string][]string{
// "Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
}),
},
})
e, c := testServer(m)
defer c()
ctx := context.Background()
r, err := NewRepository(ctx, repo, e, nil)
if err != nil {
t.Fatal(err)
}
l := r.Blobs(ctx)
_, err = l.Stat(ctx, dgst)
if err == nil {
t.Fatal(err)
}
if !strings.Contains(err.Error(), "missing content-length heade") {
t.Fatalf("Expected missing content-length error message")
}
}
示例14: HomeHandler
func HomeHandler(w http.ResponseWriter, r *http.Request) {
data, _ := json.Marshal([]string{"San Francisco", "Amsterdam",
"Berlin","Palo Alto", "Los Altos})
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(data)
}
func main() {
http.HandleFunc("/", HomeHandler)
err := http.ListenAndServe(":"+os.Getenv("PORT"), nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
示例15: TestRatelimitGlobal
// This test takes ~1 seconds to run
func TestRatelimitGlobal(t *testing.T) {
rl := NewRatelimiter()
sendReq := func(endpoint string) {
bucket := rl.LockBucket(endpoint)
headers := http.Header(make(map[string][]string))
headers.Set("X-RateLimit-Global", "1")
// Reset for approx 1 seconds from now
headers.Set("Retry-After", "1000")
err := bucket.Release(headers)
if err != nil {
t.Errorf("Release returned error: %v", err)
}
}
sent := time.Now()
// This should trigger a global ratelimit
sendReq("/guilds/99/channels")
time.Sleep(time.Millisecond * 100)
// This shouldn't go through in less than 1 second
sendReq("/guilds/55/channels")
if time.Since(sent) >= time.Second && time.Since(sent) < time.Second*2 {
t.Log("OK", time.Since(sent))
} else {
t.Error("Did not ratelimit correctly, got:", time.Since(sent))
}
}