Мне нужно было бы расширить пакет http для достижения нестандартного ответа, содержащего описание ошибки в статусе, то есть: 400 Требуемый параметр отсутствует вместо 400 Базовый запрос, который является стандартным описанием статуса.Расширение пакета http galang
Это моя фактическая реализация:
package main
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"net/url"
)
type GatewayHandler int
func main() {
var gh GatewayHandler
http.ListenAndServe(":9000", gh)
}
func (gh GatewayHandler) ServeHTTP(res http.ResponseWriter, req *http.Request) {
legacyApiUrl := "http://some-url.com" + req.URL.RequestURI()
client := &http.Client{}
request, _ := http.NewRequest(req.Method, legacyApiUrl, nil)
response, _ := client.Do(request)
res.Header().Set("Status", response.Status)
for k, v := range response.Header {
fmt.Println(k, ": ", v)
i := ""
for _, j := range v {
i += j
}
res.Header().Set(k, i)
}
res.WriteHeader(response.StatusCode)
if response.Status != "200 OK" {
fmt.Println(response.Status)
}
result, _ := ioutil.ReadAll(response.Body)
output := string(result)
fmt.Println(output)
io.WriteString(res, output)
}
В общем мне нужно передать этот статус с другого URL, который использует его, и мне нужно, чтобы держать его совместимым.
спасибо, что заранее.
Юзеф
Какая у вас проблема? Что не работает для вас в вашей текущей реализации? Вы хотите написать прокси для некоторых устаревших API? – Nebril
Да, вроде ... Проблема заключается в заголовках, которые должны быть похожими на<сообщение о статусе> Сообщение о состоянии должно содержать описание ошибки, но не такое стандартное, как 400 Плохой запрос, но 400 Требуемый параметр отсутствует или 400 Нет временной отметки в запросе или так ... –