我正在使用RESTful Web服务开发客户端 - 服务器应用程序。
我想在客户端上询问用户输入并将其发送到服务器并在我的程序的其余部分中使用该名称,但我无法正确地将名称发送到服务器。
以下是我的计划的一部分:
客户:
func main() {
//getting input
fmt.Println("Please enter your name: ")
reader := bufio.NewReader(os.Stdin)
myName, _ := reader.ReadString('\n')
client := &http.Client{
CheckRedirect: nil,
}
reply, err := http.NewRequest("GET", "http://localhost:8080/", nil)
reply.Header.Add("username", myName)
client.Do(reply)
if err != nil {
fmt.Println(err)
}
服务器:
func CreateClient(w http.ResponseWriter, r *http.Request) {
clientName := r.Header.Get("username")
fmt.Println(clientName, "---------")//it's empty
cli := &Client{
currentRoom: nil, //starts as nil because the user is not initally in a room
outputChannel: make(chan string),
name: clientName,
}
Members = append(Members, cli)
reply := cli.name
fmt.Fprintf(w, reply)
}
在客户端,回复(reply.Header.Add("username", myName)
)在标题中有用户名,但在服务器端clientName(clientName := r.Header.Get("username")
)为空,所以我的程序的其余部分将不会运行。
我的问题是我无法将用户输入发送到服务器并在客户端将其取回。
有人能告诉我如何解决问题吗?
你可能想看看http query string
。 Wikipedia
发送用户名。
req := http.NewRequest("GET","localhost:8080",nil)
q:=req.URL.Query()
q.Add("username",myName)
req.URL.RawQuery = q.Encode()
Resp,err:=http. Client{}.Do(req)
收到用户名:
clientName := r.URL.Query()["username"][0]
请注意,如果您要对密码或任何其他敏感数据执行相同操作,请对如何确保其安全进行一些研究,不要复制此代码。