Open fanlushuai opened 3 years ago
后面有代码:req.Header.Set("Content-Type", w.FormDataContentType()) 会设置。
后面有代码:req.Header.Set("Content-Type", w.FormDataContentType()) 会设置。
你检查下吧。我抓包分析的,并没有带有。
刚才特意看了下代码。应该是有问题的。会被这个文件检查条件,干掉。
Content-Type", "application/x-www-form-urlencoded。顺便说下,是这个头
你把你的测试代码发一下,我看看。
func GetKillInitInfo(skuId string, num string) (initData InitData, err error) {
url := "https://marathon.jd.com/seckillnew/orderService/pc/init.action"
header := requests.Header{
"Host": "marathon.jd.com",
}
data := requests.Datas{
"sku": skuId,
"num": num,
"isModifyAddress": "false",
}
// 两个图的差异,就是因为我在外面特殊的处理了一下。默认是没有这个头的,所以认为有问题!!!
header["Content-Type"] = "application/x-www-form-urlencoded"
resp, err := sessionReq.Post(url, header, data)
if err != nil {
fmt.Println("fuck initinfo 获取失败了。好好思考一下")
return InitData{}, errors.New("请求错误")
}
var initdata InitData
resp.Json(&initdata)
if len(initData.AddressList) == 0 {
return InitData{}, errors.New("响应错误,估计被频率限制了")
}
return initdata, nil
}
好的,我测试出来了,我试着改改
好的,我测试出来了,我试着改改
哈哈。
我把if 判断去掉了。不过这样多次调用,他会不会重复加。你试试吧。
419行,有一个问题,强制设置的话,别人就不能自己改了。这不好。
419行,有一个问题,强制设置的话,别人就不能自己改了。这不好。
你看后面,在解析外部传来的header的时候,会重新设置header。用户的传参如果设置了会直接覆盖这个默认逻辑。也就是说。用户的设置相当于优先级最高。
我把if 判断去掉了。不过这样多次调用,他会不会重复加。你试试吧。
单纯去掉if。应该是不行的。
因为我看到。header的数据结构为:type Header map[string][]string 再看下,add,set,get,的逻辑。 set会去覆盖,添加新值 add。是去给一个key追加一个新的元素。 而get是获取这个key的元素列表的第一个。
所以,set是合适的。add不合适。因为一直add不是我们的想法。也会造成内存问题。
我现在的做法是 强制设置了 content-type,如果你想改变每次都加在header里设置。 如果有问题欢迎再次沟通。谢谢你的宝贵意见。
意思是,设置了。进行覆盖。没设置,不管了?
是不是应该是,没设置进行设置?