Golang中如何设置POST请求的Headers

Golang中如何设置POST请求的Headers 大家好,

我想创建一个HTTP POST请求。如何设置两个头键? 我尝试了这种方法:

requestPost, _ := http.NewRequest("POST", "link", bytes.NewBuffer(jsonValue))
requestPost.Header.Set("Authorization", "key")
requestPost.Header.Set("Content-Type", "application/json")

但这没有生效。 Header.Set在GET请求中运行正常,当时我只有一个键,但如何设置两个键呢?


更多关于Golang中如何设置POST请求的Headers的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

感谢您的回答。我检查了错误,没有发现任何问题。关于身份验证,我不需要用户名,只需要在请求头中设置以下内容:

Key                                      值
-----------------------------------------------------
Authorization                        "key"
Content-Type                         application/json

干杯。

更新:

我已经成功解决了问题。只需要执行以下操作:

requestPost.Header.Set("Authorization","key")
requestPost.Header.Add("Content-Type", "application/json")

非常感谢!

更多关于Golang中如何设置POST请求的Headers的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


  1. 始终检查错误。
requestPost, err := http.NewRequest("POST", "link", bytes.NewBuffer(jsonValue))
if err != nil {
log.Fatal("Error reading request. ", err)
}
  1. 我认为你需要在请求头中添加认证类型
func basicAuth(username, password string) string {
  auth := username + ":" + password
   return base64.StdEncoding.EncodeToString([]byte(auth))
}

req.Header.Add("Authorization","Basic " + basicAuth("username1","password123"))

在Go语言中,设置HTTP POST请求的多个Header键是完全可行的,你使用的方法是正确的。问题可能出现在其他环节,比如请求发送或服务器端处理。以下是一个完整的示例,展示如何正确设置多个Header并发送POST请求:

package main

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

func main() {
    // 准备POST数据
    postData := map[string]interface{}{
        "name":  "John Doe",
        "email": "john@example.com",
    }
    
    jsonValue, _ := json.Marshal(postData)
    
    // 创建请求
    requestPost, err := http.NewRequest("POST", "https://httpbin.org/post", bytes.NewBuffer(jsonValue))
    if err != nil {
        fmt.Printf("创建请求失败: %v\n", err)
        return
    }
    
    // 设置多个Header
    requestPost.Header.Set("Authorization", "Bearer your-token-here")
    requestPost.Header.Set("Content-Type", "application/json")
    requestPost.Header.Set("User-Agent", "MyGoClient/1.0")
    
    // 发送请求
    client := &http.Client{}
    response, err := client.Do(requestPost)
    if err != nil {
        fmt.Printf("发送请求失败: %v\n", err)
        return
    }
    defer response.Body.Close()
    
    // 读取响应
    body, _ := ioutil.ReadAll(response.Body)
    fmt.Printf("响应状态: %d\n", response.StatusCode)
    fmt.Printf("响应体: %s\n", string(body))
    
    // 验证Header是否设置成功
    fmt.Printf("设置的Authorization头: %s\n", requestPost.Header.Get("Authorization"))
    fmt.Printf("设置的Content-Type头: %s\n", requestPost.Header.Get("Content-Type"))
}

如果你需要检查实际发送的Header,可以使用以下调试方法:

// 在发送请求前添加调试信息
fmt.Printf("请求Header: %+v\n", requestPost.Header)

// 或者使用自定义Transport来查看实际发送的Header
client := &http.Client{
    Transport: &http.Transport{
        // 可以在这里添加自定义逻辑来查看实际发送的请求
    },
}

确保你的目标URL正确且服务器能够处理这些Header。某些服务器可能对特定的Header名称有特殊要求,比如Authorization头的格式可能需要是"Bearer token"或"Basic credentials"。

如果你的代码仍然有问题,请检查:

  1. 目标URL是否可访问
  2. 服务器是否期望这些特定的Header
  3. 是否有其他中间件或代理在修改请求Header

你原来的方法在语法上是完全正确的,问题可能出现在执行环境或服务器配置上。

回到顶部