gpt4 book ai didi

go - 使用 golang 代理 REST API

转载 作者:IT王子 更新时间:2023-10-29 01:34:44 26 4
gpt4 key购买 nike

我实际上正在学习 golang 并尝试在我用另一种语言制作的 Rest API 上实现代理

目前,我只想查询我的 golang API,提取它们的实际路径参数并基于它查询其他 API。

我希望结果“完全”相同(或者至少是正文部分),就像一个简单的 JSON。

目前,我不想为我的数据创建结构,我只想简单地获取和检索内容。

这是我所拥有的:

package main

import (
"fmt"
"net/http"

"github.com/gorilla/mux"
)

const API_URL string = "https://my-api-path/"

func setHeaders(w http.ResponseWriter) {
w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json")
}

func extractParams(r *http.Request) map[string]string {
return mux.Vars(r)
}

func getHandler(w http.ResponseWriter, r *http.Request) {
setHeaders(w)
params := extractParams(r)

url := API_URL + params["everything"]
response, err := http.Get(url)

if err != nil {
fmt.Fprint(w, err)
}

fmt.Fprint(w, response)

}

func main() {
router := mux.NewRouter()
router.HandleFunc("/{everything}", getHandler)
http.ListenAndServe(":8080", router)
}

我的问题

目前,我无法从我的其他 API 检索 JSON 信息。我只有一个 text/plain Content-Type 这很奇怪,因为我强制执行 application/json 并且我在响应中只有一些 header 详细信息正文,类似于:

&{200 OK 200 HTTP/2.0 2 0 map[Allow:[GET, HEAD, OPTIONS] Expect-Ct:[max-age=86400, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"] Server:[cloudflare] Cf-Ray:[some-ray] Date:[Tue, 12 Jun 2018 14:38:57 GMT] Content-Type:[application/json] Set-Cookie:[__cfduid=lolol; expires=Wed, 12-Jun-19 14:38:56 GMT; path=/; domain=some-domain; HttpOnly; Secure] Vary:[Accept-Encoding Cookie] X-Frame-Options:[SAMEORIGIN] X-Xss-Protection:[1; mode=block]] 0xc4201926f0 -1 [] false true map[] 0xc420150800 0xc4200e8370}

您知道我如何代理此请求(或 JSON 结果)吗?

最佳答案

关于 Content-Type header 未写入您的响应:

由于您执行这些操作的顺序,这似乎是预期的:

w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json")

参见此处:https://golang.org/pkg/net/http/#ResponseWriter

Changing the header map after a call to WriteHeader (or Write) has no effect unless the modified headers are trailers.

试着把它们倒过来读:

w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)

关于go - 使用 golang 代理 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50819963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com