小黄鸡,人机对答类的应用,挺暴力的一个工具,看有人用PHP调用这个小应用并放到了微信里面,觉得有点意思,就用Golang写一段代码,在终端下调用。
小黄鸡是使用http://www.xiaohuangji.com/ajax.php进行交互的,发送请求,返回应答,如图:

红色部份就是你所发起的请求:

请求的内容,参数为para,如请求的你好。

对应的服务器的响应信息。
明白了这个之后,下面的事就是如何使用Golang进行请求,然后再接收服务器的响应信息。这里我们需要使用func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error)这个函数来进行操作。
里面的data需要处理一下。对于data,它是一个map,设置的话,是这样的:
1
| url.Values{"key": {"Value"}, "id": {"123"}}
|
写好这个内容之后,然后就是不停的循环这个过程了。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package main
import ( "fmt" "io/ioutil" "log" "net/http" "net/url" "os" "strings" )
const ( URL = "http://www.xiaohuangji.com/ajax.php" )
func main() { var input string for { fmt.Print("我说: ") fmt.Scanf("%s", &input) if input == "q" { os.Exit(1) } else { fmt.Printf("小黄说: %s\n", XiaoHuangJi(input)) fmt.Println(strings.Repeat("-", 40)) } } }
func XiaoHuangJi(input string) string { data := url.Values{} data.Set("para", input) resp, err := http.PostForm(URL, data) if err != nil { log.Fatal("读取不出来,出问题啦!") }
if resp != nil && resp.Body != nil { defer resp.Body.Close() output, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal("数据读不出来呀!") }
return string(output) } return "" }
|
使用了fmt.Sanf()来进行数据的读取,如果遇到q则停止这个循环。