golang语言中发起http请求

package main
 
import (
    "fmt"
    "io/ioutil"
    "net/http"
)

// 简单直接的GET请求
func httpGet() {
    // func Get(url string) (resp *Response, err error)
    resp, err := http.Get("http://www.baidu.com")
    if err != nil {
        // handle error
        panic(err)
    }
 
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }
 
    fmt.Println(string(body))
}

// POST请求 -- 使用http.Post()方法
func httpPost() {
    // func Post(url string, bodyType string, body io.Reader) (resp *Response, err error)
    resp, err := http.Post("http://www.baidu.com",
        "application/x-www-form-urlencoded",
        strings.NewReader("name=yjb&age=99"))
    if err != nil {
        fmt.Println(err)
    }
 
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }
 
    fmt.Println(string(body))
}
Tips:使用这个方法的话,第二个参数要设置成”application/x-www-form-urlencoded”,否则post参数无法传递。

// POST请求 -- 使用http.PostForm()方法
func httpPostForm() {
    resp, err := http.PostForm("http://www.baidu.com",
        url.Values{"key": {"Value"}, "id": {"123"}})
 
    if err != nil {
        // handle error
    }
 
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }
 
    fmt.Println(string(body))
}

// 复杂的请求(设置头参数、cookie之类的数据),可以使用http.Client的Do()方法
func httpDo() {
    client := &http.Client{}
 
    req, err := http.NewRequest("POST", "http://www.baidu.com", strings.NewReader("name=yjb"))
    if err != nil {
        // handle error
    }
 
    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    req.Header.Set("Cookie", "name=anny")
 
    resp, err := client.Do(req)
 
    defer resp.Body.Close()
 
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }
 
    fmt.Println(string(body))
}

在 Go 语言发送 HTTP 请求上传文件通常涉及两个关键步骤:创建 HTTP 客户端,然后构建包含文件数据的multipart/form-data 部分。这里是一个简单的示例: ```go package main import ( "bytes" "fmt" "io/ioutil" "log" "net/http" ) // 文件上传函数 func uploadFile(url string, file multipart.File, filename string) error { // 创建一个HTTP POST请求 req, err := http.NewRequest("POST", url, nil) if err != nil { return err } // 设置Content-Type为multipart/form-data req.Header.Set("Content-Type", "multipart/form-data") // 将文件添加到请求体 body := &bytes.Buffer{} writer := multipart.NewWriter(body) part, err := writer.CreateFormFile("file", filename) // "file"是表单字段名 if err != nil { return err } _, err = io.Copy(part, file) if err != nil { return err } writer.Close() // 添加文件结束标记 req.Body = ioutil.NopCloser(writer) // 发起HTTP请求并处理响应 client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close() // 检查请求是否成功 if resp.StatusCode != http.StatusOK { log.Printf("Error uploading file: %s\n", resp.Status) return fmt.Errorf("upload failed with status code: %d", resp.StatusCode) } fmt.Println("File uploaded successfully") return nil } // 示例:读取本地文件并上传 func main() { file, err := os.Open("path/to/local/file.txt") // 替换为实际文件路径 if err != nil { log.Fatal(err) } defer file.Close() // 上传到这个URL(替换为实际地址) url := "https://example.com/upload" err = uploadFile(url, file, "local_file.txt") // 使用文件名作为字段名 if err != nil { log.Fatal(err) } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值