新手问题 http.NewRequest自定义header头键值对,如何让keyName首字母不大写?

itsky365 · 2017年04月01日 · 最后由 wdxxl 回复于 2018年10月08日 · 777 次阅读

今天在开发 个推 push 时,发现一个坑,和官方反馈,得到的消息是,他们不兼容 header 中 keyName 首字母大小写的问题。让开发人员自行解决。

发起请求的部分代码如下:

req, err := http.NewRequest("POST", url, body)
    req.Header.Add("authtoken", auth_token)

打印的日志如下:

&{POST https://restapi.getui.com/v1/hxzW1engjT6GEzDwU3YSpA/push_single HTTP/1.1 1 1 map[Authtoken:[151af1b9d4ba2d57f126b30d59b4ec585dd72d8e8980e5d63131e67478cd9702] Content-Type:[application/json]]

这里输出的 Authtoken是首字母大写的,并不是小写的,导致 个推 返回错误信息

respResult  {"result":"not_auth"}

个推示例代码:

curl -H "Content-Type: application/json" \
     -H "authtoken:eef0742e9bb7aa52bd1ede66a0a20c68057208656e5f558c020fb24aa5b98586" \
     https://restapi.getui.com/v1/CKWfvgBDRF9aSnGrvD7IJ4/push_single \
     -XPOST -d '{
                    "message":{
                                "appkey":"pMEgGQ9bgz5LVAPX8q8WH4",
                                "is_offline":false,
                                "msgtype":"notification"
                               },
                    "notification":{
                                    "text":"text",
                                    "title":"tttt",
                                    "transmission_type":true,
                                    "transmission_content":"透传内容"
                                    },
                    "cid":"1fa0795a57c863ecc9a9ea6437b8924f",
                    "requestid":"123456789"
                 }'

用 curl 返回结果

{"result":"ok", "taskid":"RASS_0109_3ed7bcb9904a2d8208261d0c78a1e999", "status":"successed_offline"}

参考链接

http://docs.getui.com/server/rest/push/#3

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

没有办法,Go 是遵循 HTTP RFC 的,Header 的大小写规则是规范规定的,没有什么办法。

// 大小写有特殊要求的用下面这种方式添加
req.Header["authtoken"] = []string{auth_token}

header 是 map 所以像楼上那样直接跳过 set ,直接给值就可以了

https://github.com/golang/go/blob/master/src/net/textproto/reader_test.go#L43 特地找到源码佐证了一下.

https://github.com/golang/go/blob/master/src/net/textproto/header.go 默认对象 Add Set 都会调用。特殊情况还是如一楼所示直接手动操作 header map 吧

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册