go 实现发送post请求的两种方法

10 篇文章 1 订阅
4 篇文章 0 订阅

1、http.NewRequest()

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"unsafe"
)

type JsonPostSample struct {
}

func (this *JsonPostSample) SamplePost() {
	info := make(map[string]string)    
	info["username"] = "******"
	info["password"] = "******"

	bytesData, err := json.Marshal(info)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(bytesData)

	reader := bytes.NewReader(bytesData)
	

	url := "http://xxxxxxxx.com"     //要访问的Url地址
	request, err := http.NewRequest("POST", url, reader)
	defer request.Body.Close()    //程序在使用完回复后必须关闭回复的主体
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	request.Header.Set("Content-Type", "application/json;charset=UTF-8")   
	//必须设定该参数,POST参数才能正常提交,意思是以json串提交数据
	
	client := http.Client{}
	resp, err := client.Do(request) //Do 方法发送请求,返回 HTTP 回复
	if err != nil {
		fmt.Println("22222", err.Error())
		return
	}

	respBytes, err := ioutil.ReadAll(resp.Body)   
	if err != nil {
		fmt.Println("33333", err.Error())
		return
	}

	//byte数组直接转成string,优化内存
	str := (*string)(unsafe.Pointer(&respBytes))
	fmt.Println("44444", *str)

	//fmt.Println(string(respBytes))
}

func main() {
	a := new(JsonPostSample)
	a.SamplePost()

}

参考资料:https://blog.csdn.net/chenghuan1990/article/details/75426066

获取状态码,包头信息等:https://juejin.im/post/5ce242c2f265da1b6e6574de

2、http.Post()

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	song := make(map[string]string)
	song["username"] = "******"
	song["password"] = "******"
	bytesData, _ := json.Marshal(song)

	res, err := http.Post("http://xxxxxx.com",
		"application/json;charset=utf-8", bytes.NewBuffer([]byte(bytesData)))
	if err != nil {
		fmt.Println("Fatal error ", err.Error())
	}

	defer res.Body.Close()

	content, err := ioutil.ReadAll(res.Body)
	if err != nil {
		fmt.Println("Fatal error ", err.Error())
	}

	//fmt.Println(string(content))
	str := (*string)(unsafe.Pointer(&content)) //转化为string,优化内存
	fmt.Println(*str)
}

参考资料:https://www.kancloud.cn/digest/batu-go/153529

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Go 语言可以很容易地使用 net/http 包来发送 HTTP 请求,可以使用以下代码实现 post 请求:resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf) ### 回答2: Go语言发送Post请求的步骤如下: 1. 首先,我们需要导入`net/http`库,该库提供了用于发送HTTP请求的功能。 2. 创建一个`http.Client`对象,该对象用于发送HTTP请求。 ```go client := &http.Client{} ``` 3. 创建一个`http.NewRequest`对象,该对象用于构建HTTP请求。通过指定请求的URL、请求方法请求体等参数来创建该对象。 ```go req, err := http.NewRequest("POST", "http://example.com/api", bytes.NewBuffer([]byte("Request Body"))) ``` 4. 设置请求头信息,例如设置`Content-Type`和`Authorization`等。 ```go req.Header.Set("Content-Type", "application/json") req.Header.Set("Authorization", "Bearer token") ``` 5. 发送HTTP请求,并获取响应。 ```go resp, err := client.Do(req) ``` 6. 确保在函数结束后关闭响应体。 ```go defer resp.Body.Close() ``` 7. 从响应中读取数据。 ```go body, err := ioutil.ReadAll(resp.Body) ``` 完整的示例代码如下: ```go package main import ( "bytes" "fmt" "io/ioutil" "net/http" ) func main() { client := &http.Client{} req, err := http.NewRequest("POST", "http://example.com/api", bytes.NewBuffer([]byte("Request Body"))) if err != nil { fmt.Println("Error creating request:", err) return } req.Header.Set("Content-Type", "application/json") req.Header.Set("Authorization", "Bearer token") resp, err := client.Do(req) if err != nil { fmt.Println("Error sending request:", err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("Error reading response:", err) return } fmt.Println("Response:", string(body)) } ``` 这样,我们就可以使用Go语言发送Post请求了。 ### 回答3: 要使用Go语言发送POST http请求,可以使用Go语言标准库中的net/http包。下面是一个简单的示例代码: ```go package main import ( "bytes" "fmt" "io/ioutil" "net/http" ) func main() { url := "http://example.com/api" // 设置请求的URL data := []byte(`{"name": "John", "age": 30}`) // 设置请求的数据 req, err := http.NewRequest("POST", url, bytes.NewBuffer(data)) if err != nil { fmt.Println("创建请求失败:", err) return } // 设置请求头 req.Header.Set("Content-Type", "application/json") // 创建HTTP客户端并发送请求 client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("发送请求失败:", err) return } defer resp.Body.Close() // 读取响应内容 respData, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("读取响应失败:", err) return } fmt.Println("响应内容:", string(respData)) } ``` 以上代码首先创建了一个POST请求,并设置了请求的URL和数据。然后,通过设置请求头的方式指定了请求数据的类型为JSON。接下来,创建了一个HTTP客户端并发送请求。最后,读取响应的内容,并打印出来。 这仅是一个简单的例子,实际的场景可能还涉及到error处理、身份验证、cookie等。可以根据具体需求进行适当修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值