Golang中如何显示HTTP请求的错误响应 - 已解决
Golang中如何显示HTTP请求的错误响应 - 已解决 以下是我的Web服务器中的一个函数。
func tgetfiles(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return
}
APIKEY := r.FormValue("APIKEY")
TASK := r.FormValue("TASK")
enableCors(&w)
当另一端的API返回404时,它会返回XML,但这只会显示文件未找到。
这是Web服务器部分。
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "API Brdige for Proclaim")
})
http.HandleFunc("/test/workflow", tworkflows)
http.HandleFunc("/test/status", tstatus)
http.HandleFunc("/test/engineer", tengineer)
http.HandleFunc("/test/bookengineer", tbengineer)
如何让它显示来自API服务器的XML?
更多关于Golang中如何显示HTTP请求的错误响应 - 已解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang中如何显示HTTP请求的错误响应 - 已解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在您的tgetfiles函数中,您需要捕获从API服务器返回的响应,包括状态码和响应体。当API返回404时,您应该将接收到的XML响应直接返回给客户端,而不是仅显示"文件未找到"。
以下是修改后的代码示例:
func tgetfiles(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return
}
APIKEY := r.FormValue("APIKEY")
TASK := r.FormValue("TASK")
enableCors(&w)
// 构建API请求
apiURL := "您的API端点URL"
req, err := http.NewRequest("GET", apiURL, nil)
if err != nil {
http.Error(w, fmt.Sprintf("创建请求失败: %v", err), http.StatusInternalServerError)
return
}
// 添加必要的头部
req.Header.Add("APIKEY", APIKEY)
// 添加其他必要的头部参数
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
http.Error(w, fmt.Sprintf("API请求失败: %v", err), http.StatusInternalServerError)
return
}
defer resp.Body.Close()
// 设置与API响应相同的状态码
w.WriteHeader(resp.StatusCode)
// 设置内容类型为XML
w.Header().Set("Content-Type", "application/xml")
// 将API响应体直接复制到响应写入器
_, err = io.Copy(w, resp.Body)
if err != nil {
http.Error(w, fmt.Sprintf("复制响应失败: %v", err), http.StatusInternalServerError)
return
}
}
如果您已经有一个处理API调用的函数,可以这样修改:
func callAPI(apiURL string) (*http.Response, error) {
resp, err := http.Get(apiURL)
if err != nil {
return nil, err
}
return resp, nil
}
func tgetfiles(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return
}
APIKEY := r.FormValue("APIKEY")
TASK := r.FormValue("TASK")
enableCors(&w)
// 调用API
apiURL := "您的API端点URL"
resp, err := callAPI(apiURL)
if err != nil {
http.Error(w, fmt.Sprintf("API调用失败: %v", err), http.StatusInternalServerError)
return
}
defer resp.Body.Close()
// 设置状态码和内容类型
w.WriteHeader(resp.StatusCode)
w.Header().Set("Content-Type", resp.Header.Get("Content-Type"))
// 转发响应体
body, err := io.ReadAll(resp.Body)
if err != nil {
http.Error(w, fmt.Sprintf("读取响应失败: %v", err), http.StatusInternalServerError)
return
}
w.Write(body)
}
这样,当API服务器返回404状态码和XML响应时,您的Web服务器会将相同的状态码和XML内容返回给客户端。

