我正在尝试向我的Go服务器发送一个JSON对象。我已经看了所有我能找到的例子,但不知道我遗漏了什么。
服务器代码:
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"text/template"
)
func handler(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("list.html")
if err != nil {
fmt.Println("Failed to parse")
log.Fatal(err)
}
m := make(map[string]string)
m["Title"] = "A title"
err = t.Execute(w, m)
if err != nil {
fmt.Println("Failed to execute")
log.Fatal(err)
}
}
func getRes(w http.ResponseWriter, r *http.Request) {
fmt.Println("HEADER: ", r.Header)
fmt.Println("CL: ", r.ContentLength)
fmt.Println("CT: ", r.Header.Get("Content-Type"))
b, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println("B: ", string(b))
}
func main() {
fmt.Println("Starting")
http.HandleFunc("/", handler)
http.HandleFunc("/getRes/", getRes)
log.Fatal(http.ListenAndServe(":8080", nil))
}
当我使用卷曲时,这是有效的。
curl --header "Content-Type: application/json" -d "{\"rating\":3}" http://localhost:8080/getRes/
我得到的答复是:
HEADER: map[Accept:[*/*] Content-Length:[12] Content-Type:[application/json] User-Agent:[curl/7.58.0]]
CL: 12
CT: application/json
B: {"rating":3}
当我使用以下HTML/Javascript代码时,它不起作用:
<html>
<head>
<script>
window.onload = function() {
fetch("getRes", {
"method": "POST",
"body": JSON.stringify({
"rating": 5
}),
"headers": {
"Content-type": "application/json"
}
});
}
</script>
</head>
<body>
{{.Title}}
</body></html>
我收到了一个响应,但它是空的,内容长度为零:
HEADER: map[Accept:[*/*] Accept-Encoding:[gzip, deflate, br] Accept-Language:[en-GB,en-US;q=0.9,en;q=0.8] Connection:[keep-alive] Referer:[http://localhost:8080/] Sec-Fetch-Mode:[cors] Sec-Fetch-Site:[same-origin] User-Agent:[Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36]]
CL: 0
CT:
B: