我正在使用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(reply.Header.Add("username", myName)
)的标题中包含用户名,但是在服务器端,clientName(clientName := r.Header.Get("username")
)为空,因此程序的其余部分将无法运行。
我的问题是我无法将用户输入发送到服务器并将其取回客户端。
有人可以告诉我如何解决这个问题吗?
您可能想看看http query string
。维基百科
发送用户名。
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]
请注意,如果您打算对密码或任何其他敏感数据进行相同的操作,请对如何使其安全进行一些研究,并且请勿复制此代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句