zoukankan      html  css  js  c++  java
  • Golang实现requests库

    Golang实现requests库

    简单的封装下,方便使用,像python的requests库一样。

    Github地址

    Github

    支持

    • GETPOSTPUTDELETE
    • application/jsonapplication/x-www-form-urlencoded

    不支持:

    • multipart/form-data(现已支持,2019-04-16更新)

    使用

    下面是常用的例子,GET请求;POST表单提交、json提交,保存文件等。

    Get

    func getText() {
    	text, err := requests.Get("http://127.0.0.1:8080/ping").
    		Params(url.Values{
    			"param1": {"value1"},
    			"param2": {"123"},
    		}).
    		Send().
    		Text()
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(text)
    }
    

    GET请求一般需要传递query string,如下:

    GET http://127.0.0.1:8080/ping?param1=value1&param2=123 HTTP/1.1
    

    Post Form

    func postForm() {
    	text, err := requests.Post("http://127.0.0.1:8080/ping").
    		Params(url.Values{
    			"param1": {"value1"},
    			"param2": {"123"},
    		}).
    		Form(url.Values{
    			"form1": {"value1"},
    			"form2": {"123"},
    		}).
    		Send().
    		Text()
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(text)
    }
    

    POST表单提交,需要在请求体中放入表单参数:

    POST http://127.0.0.1:8080/ping?param1=value1&param2=123 HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    form1=value1&form2=123
    

    Post Json

    func postJson() {
    	text, err := requests.Post("http://127.0.0.1:8080/ping").
    		Params(url.Values{
    			"param1": {"value1"},
    			"param2": {"123"},
    		}).
    		Json(map[string]interface{}{
    			"json1": "value1",
    			"json2": 2,
    		}).
    		Send().
    		Text()
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(text)
    }
    

    POST json请求需要在请求体中放入json字符串:

    POST http://127.0.0.1:8080/ping?param1=value1&param2=123 HTTP/1.1
    Content-Type: application/json
    
    {"json1": "value1", "json2": 2}
    

    保存文件

    func save() {
    	err := requests.Get("https://github.com/xuanbo/requests").
    		Send().
    		Save("./requests.html")
    	if err != nil {
    		panic(err)
    	}
    }
    

    实现思路

    主要是通过golang的标准库http去发送请求,下面是伪码:

    // 1.创建请求
    req, err := http.NewRequest(method, url, strings.NewReader(body))
    
    // 2.设置请求头
    req.Header
    
    // 3.发送请求
    resp, err:= http.DefaultClient.Do(req)
    
    // 4.处理响应
    r.Resp.Body
    

    说明

    Just for fun!

  • 相关阅读:
    关于高等代数的计算题III(线性方程组)
    关于高等代数的计算题I(矩阵,标准形,二次型)
    日志打印太多导致cpu 100%问题解决
    xxl-job串行任务挂死问题
    apache http调用设置超时时间
    动态修改logback日志级别
    prom2click批量参数设置
    logback日志使用
    跨线程池传递线程变量,使用阿里的transmittable-thread-local
    ES操作整理
  • 原文地址:https://www.cnblogs.com/bener/p/10688294.html
Copyright © 2011-2022 走看看