在使用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
$

请给我提供一个选项

广告
将在 10 秒后关闭
bannerAds