在使用Golang的重定向时遇到了问题
我大幅重新书写了它
請問有什麼問題?
net/http的Do、Get、Post、PostForm方法会自动重定向到返回301、302等状态码的URL,但会忽略Set-Cookie。
再次出現
package main
import (
"fmt"
"net/http"
"time"
)
func redirectHandler(w http.ResponseWriter, r *http.Request){
name := r.PostFormValue("name")
if name == "" {
fmt.Fprint(w, "nameが設定されていません")
} else {
cookie := http.Cookie {
Name : "name",
Value : name,
Expires : time.Now().AddDate(0, 0, 1),
}
http.SetCookie(w, &cookie)
http.Redirect(w, r, "/home", http.StatusFound)
}
}
func homeHandler(w http.ResponseWriter, r *http.Request){
cookie, err := r.Cookie("name")
name := "unknown"
if err == nil {
name = cookie.Value
}
fmt.Fprintf(w, "Hello %s", name)
}
func main() {
http.HandleFunc("/home", homeHandler)
http.HandleFunc("/redirect", redirectHandler)
http.ListenAndServe(":8080", nil)
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
"net/url"
)
func main(){
res, _ := http.PostForm("http://localhost:8080/redirect",
url.Values{
"name" : {"hogeeeeeeeee"},
},
)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(string(body))
}
启动服务器
$ go run server.go
运行 post.go
$ go run post.go
Hello unknown
$
解决方案
让我们使用饼干罐吧。 ba.)
package main
import (
"fmt"
"net/http"
"io/ioutil"
"net/url"
"net/http/cookiejar"
)
func main(){
jar, _ := cookiejar.New(nil)
client := http.Client{Jar: jar}
res, _ := client.PostForm("http://localhost:8080/redirect",
url.Values{
"name" : {"hogeeeeeeeee"},
},
)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(string(body))
}
$ go run post2.go
Hello hogeeeeeeeee
$