今天用go重写了一个用Ruby实现的http请求功能。但是在请求参数相同的情况下go的请求一直被服务器返回参数错误。
既然参数相同,那就应该是Header里面有问题喽?
我把Ruby代码生成的请求弄出来看了下
POST参数是包在payload里面的。哦!
等等!payload是什么鬼啊!!
我在go的http package里面没看到这玩意儿。
所以还是要知道payload是干嘛的。
根据wiki的解释:payload是跟在请求header后面的数据,是一次请求的主要数据或者说主要目的。
SO上有一个直观的解释:Request Payload 就是POST、PUT等http请求所发送的数据。它是header之后的部分。
一个Content-Type是application/json的请求,具体看起来是这样的:
POST /some-path HTTP/1.1
Content-Type: application/json
{ "foo" : "bar", "name" : "John" }
{ "foo" : "bar", "name" : "John" }
就是这个请求的payload
一个Content-Type是application/x-www-form-urlencoded的请求,具体看起来是这样的:
POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
foo=bar&name=John
Ruby的http请求是用RestClient实现的,Content-Type
和Content-Length
都是自动生成的。而go那边的http请求的header都需要自己手写,所以应该是这个原因导致请求失败。
那么动手修改go的代码
使用url.values
构建post form,并且手动添加Content-Type
和Content-Length
。
然后:{"data":{},"return_code":0,"return_message":""}
就没有然后了!
有疑问加站长微信联系(非本文作者)