发送 JSON 请求以测试 beego 中的端点 API 失败,正文为空
Send JSON request to test Endpoint API in beego is failing with empty body
我正在尝试使用 beego 框架测试我的 REST API 的端点。
我的测试功能低于我用来发送 JSON 请求的功能:
func testHTTPJsonResp(url string) string {
var jsonStr = []byte(`{"title":"Buy cheese and bread for breakfast."}`)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
beego.Error(err)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, req)
beego.Debug(w)
return w.Body.String()
}
服务器确实收到了请求,但请求的输入正文始终是 empty
。
与我用来将表单数据发送到服务器的功能类似 works fine
。
func testHTTPResp(httpProt, url string, params map[string]interface{}) string {
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)
for key, val := range params {
beego.Error(key + val.(string))
_ = bodyWriter.WriteField(key, val.(string))
}
contentType := bodyWriter.FormDataContentType()
bodyWriter.Close()
r, _ := http.NewRequest(httpProt, url, bodyBuf)
r.Header.Add("Content-Type", contentType)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)
beego.Debug(w)
return w.Body.String()
}
问题: 为什么服务器接收 JSON 请求正文为空,而类似的表单编码数据正常。已经坚持了几天了,非常感谢任何指点。
Beego 中默认[=16=]禁用读取请求正文。您需要将以下行添加到 app.conf
文件
copyrequestbody = true
这解决了问题。
我正在尝试使用 beego 框架测试我的 REST API 的端点。
我的测试功能低于我用来发送 JSON 请求的功能:
func testHTTPJsonResp(url string) string {
var jsonStr = []byte(`{"title":"Buy cheese and bread for breakfast."}`)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
beego.Error(err)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, req)
beego.Debug(w)
return w.Body.String()
}
服务器确实收到了请求,但请求的输入正文始终是 empty
。
与我用来将表单数据发送到服务器的功能类似 works fine
。
func testHTTPResp(httpProt, url string, params map[string]interface{}) string {
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)
for key, val := range params {
beego.Error(key + val.(string))
_ = bodyWriter.WriteField(key, val.(string))
}
contentType := bodyWriter.FormDataContentType()
bodyWriter.Close()
r, _ := http.NewRequest(httpProt, url, bodyBuf)
r.Header.Add("Content-Type", contentType)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)
beego.Debug(w)
return w.Body.String()
}
问题: 为什么服务器接收 JSON 请求正文为空,而类似的表单编码数据正常。已经坚持了几天了,非常感谢任何指点。
Beego 中默认[=16=]禁用读取请求正文。您需要将以下行添加到 app.conf
文件
copyrequestbody = true
这解决了问题。