Как ответить на POST-запрос в Golang?
У меня есть код сервера,который получает POST-запрос, сокращает ссылку через clck.ru и печатает его.
package main
import (
"net/http"
"log"
"io/ioutil"
)
func cutHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("<h1>cut link</h1><h2>POST; applicaton/x-www-form-urlencoded; url:[url]"))
r.ParseForm()
pars:=r.Form
resp,err:=http.Get("https://clck.ru/--?url="+pars.Get("url"))
if err!=nil{
log.Panicln(err)
}
result,err:=ioutil.ReadAll(resp.Body)
if err!=nil{
log.Panicln(err)
}
log.Println(string(result))
}
func main() {
port:="765"
mux := http.NewServeMux()
mux.HandleFunc("/cut", cutHandler)
log.Println("Server is working")
http.ListenAndServe(":"+port,mux)
}
Как можно изменить код, чтобы он отвечал через POST сокращённой ссылкой в ответ на запрос (т.е. передавал вместе с текстом)?
Ответы (2 шт):
Автор решения: Senior Pomidor
→ Ссылка
если приложение запаникует(log.Panicln), то оно остановиться. Это не очень хорошо. Сервис должен продолжать работать и обслуживать других пользователей. Поэтому я поменял ответ, если возникла ошибка.
func cutHandler(w http.ResponseWriter, r *http.Request) {
formValue := r.FormValue("url")
resp, err := http.Get("https://clck.ru/--?url=" + formValue)
if err != nil {
log.Println(err)
w.Write([]byte("error getting the response"))
return
}
result, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
w.Write([]byte("error reading the response"))
return
}
log.Println(string(result))
w.Write([]byte(fmt.Sprintf("<h1>cut link</h1><h2>POST; applicaton/x-www-form-urlencoded; url: %s </h2>", string(result))))
}
Автор решения: dikey0ficial
→ Ссылка
Вопрос закрыт, т.к. я не совсем адекватно понял. Сейчас я понял, что легче отправлять всё нужное в headers, чем Post.
Если что, вот моё решение:
package main
import (
"net/http"
"log"
"io/ioutil"
)
func cutHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("content-type","applicaton/x-www-form-urlencoded")
r.ParseForm()
pars:=r.Form
resp,err:=http.Get("https://clck.ru/--?url="+pars.Get("url"))
if err!=nil{
log.Panicln(err)
}
result,err:=ioutil.ReadAll(resp.Body)
if err!=nil{
log.Panicln(err)
}
w.Header().Add("Url", string(result))
log.Println(string(result))
w.Write([]byte("<h1>Autos: /cut</h1><h2>POST; applicaton/x-www-form-urlencoded; url:[url]</h2>"))
}
func main() {
port:="765"
mux := http.NewServeMux()
mux.HandleFunc("/cut", cutHandler)
log.Println("Server is working")
http.ListenAndServe(":"+port,mux)
}
Спасибо за понимание.