var querystring = require('querystring')
var https = require('https')
var post_data = querystring.stringify({
"name":"BOb",
"age":30,
"job":"teacher"
})
var post_req = https.request(post_opt,function(res){
//some code here
})
post_req.write(post_data)
post_req.end()
然而官方api要求发送的数据是这样的:
{
"action_name": "QR_LIMIT_SCENE",
"action_info": {
"scene": {
"scene_id": 1000
}
}
}
也就是说,调用了querystring.stringify方法之后,变成了action_name=QR_LIMIT_SCENE&action_info=。
获取http请求报文头部信息
利用nodejs中的 http.ServerRequest中获取1):
request.method
用来标识请求类型
request.headers
其中我们关心两个字段:
content-type
包含了表单类型和边界字符串(下面会介绍)信息。
content-length
post数据的长度
关于content-type
get请求的headers中没有content-type这个字段
post 的 content-type 有两种
application/x-www-form-urlencoded
这种就是一般的文本表单用post传地数据,只要将得到的data用querystring解析下就可以了
multipart/form-data
文件表单的传输,也是本文介绍的重点
获取POST数据
前面已经说过,post数据的传输是可能分包的,因此必然是异步的。post数据的接受过程如下:
var postData = ''request.addListener("data", function(postDataChunk) { // 有新的数据包到达就执行
postData += postDataChunk
console.log("Received POST data chunk '"+
postDataChunk + "'.")
})
request.addListener("end", function() { // 数据传输完毕
console.log('post data finish receiving: ' + postData )
})
注意,对于非文件post数据,上面以字符串接收是没问题的,但其实 postDataChunk 是一个 buffer 类型数据,在遇到二进制时,这样的接受方式存在问题。