表單的post提交主要有三種資料格式:
text/plain
multipart/form-data
當表單傳輸資料到服務端後,服務端會接受如下資料
上面的資料格式可以簡化為:
《分隔符》\r\n資料描述\r\n\r\n資料值\r\n
《分隔符》\r\n資料描述\r\n\r\n資料值\r\n
《分隔符》\r\n資料描述1\r\n資料描述2\r\n\r\n《檔案內容》\r\n
《分隔符》–
因此,服務端可以通過以下步驟來解析資料:
1、通過」《分隔符》「將資料進行切分
[ 空,
\r\n資料描述\r\n\r\n資料值\r\n,
\r\n資料描述\r\n\r\n資料值\r\n,
\r\n資料描述1\r\n資料描述2\r\n\r\n《檔案內容》\r\n,
--\r\n]
2、丟棄頭尾元素
[\r\n資料描述\r\n\r\n資料值\r\n,
\r\n資料描述\r\n\r\n資料值\r\n,
\r\n資料描述1\r\n資料描述2\r\n\r\n《檔案內容》\r\n]
3、丟棄每一項頭尾的\r\n
[資料描述\r\n\r\n資料值,
資料描述\r\n\r\n資料值,
資料描述1\r\n資料描述2\r\n\r\n《檔案內容》]
4、用第一次出現的\r\n\r\n將資料進行切分
普通資料:[資料描述, 資料值]
或檔案資料:[資料描述1\r\n資料描述2, 《檔案內容》]
5、判斷描述的裡面有沒有"\r\n"
有——檔案資料:[資料描述1\r\n資料描述2, 《檔案內容》]
沒有——普通資料:[資料描述, 資料值]
獲取分隔符
分隔符是一組隨機字串,如何獲取分隔符?可以通過req.headers['content-type']
獲取
api1.查詢indexof()
2.擷取slice(s, e)
3.切分split
由於buffer不提供split方法,因此需要我們自己實現:
完整**buffer.prototype.split=buffer.prototype.split||function (b)
arr.push(this.slice(cur));
return arr;
};
const http=require('http');
const common=require('./libs/common'); //split 方法
req.on('end', () => ; //普通資料
let files = {}; // 文字資料
if (req.headers['content-type']) else `;
fs.writefile(path, content, err=>else;
console.log(files);
}});}})
console.log(post);}}
res.end();
})});server.listen(1337);
node中,post請求步驟
1 var alldata 2 下面是post請求接收的乙個公式 3 node為了追求極致,它是乙個小段乙個小段接收的。4 接受了一小段,可能就給別人去服務了。防止乙個過大的表單阻塞了整個程序 5 req.addlistener data function chunk 8 全部傳輸完畢 9 req....
WSGI 解析POST請求
當請求方法是post的時候,查詢字串將從http請求體中傳遞而不是通過url。請求體是wsgi伺服器提供的類似於環境變數的wsgi.input檔案。有必要知道應答體的大小,以便從wsgi.input中讀出它。wsgi明細規定,content length變數來儲存大小,它可以為空或者被忽略,所以讀它...
網路請求 Post解析
post模式請求分 同步與非同步 post模式非同步請求在處理時有兩種方法 1.block方法建立非同步請求 2.方法建立非同步請求 post模式注意的是需要攜帶乙個nsdata型別的請求體和設定乙個標識 post同步 void leftbuttonclick uibarbuttonitem lef...