从客户端向服务器发送数据 - REST webservice
Sending data from client to server - REST webservice
我正在使用 RESTful Web 服务开发 client-server 应用程序。
我想在客户端请求用户输入并将其发送到服务器并在我的程序的其余部分使用该名称,但我无法将该名称正确发送到服务器。
下面是我程序的一部分:
客户:
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)
) 在 header 中有用户名,但在服务器端 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]
请注意,如果您打算对密码或任何其他敏感数据执行相同的操作,请研究如何确保其安全并且不要复制此代码。
我正在使用 RESTful Web 服务开发 client-server 应用程序。
我想在客户端请求用户输入并将其发送到服务器并在我的程序的其余部分使用该名称,但我无法将该名称正确发送到服务器。
下面是我程序的一部分:
客户:
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)
) 在 header 中有用户名,但在服务器端 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]
请注意,如果您打算对密码或任何其他敏感数据执行相同的操作,请研究如何确保其安全并且不要复制此代码。