2016-06-08 86 views
0

我試圖發送包含一些隨機文本數據作爲第一部分和二進制數據(DER格式的證書文件)的多部分/相關數據的HTTP響應爲:第二部分。如何用NodeJS中的多部分/相關數據發送HTTP響應

從Wireshark看來,第一部分是正確的,但第二部分(PKIX)已損壞--WS顯示格式錯誤的數據包。

我也嘗試發送數據作爲緩衝但無濟於事。

代碼是這樣的 - 我錯過了什麼嗎?

var http = require('http'); 

var server = http.createServer(function(req, res) {  

    var data = 'some data'; 
    var file = fs.readFileSync("cert.der"); 

    var responseData = '--abcd1234\r\n' + 
       'Content-type: text/xml; charset=utf-8\r\n' + 'Content-Transfer-Encoding: binary\r\n' + 'Content-ID: <xxxx>\r\n\r\n' + 
       data + '\r\n' + 
       '--abcd1234\r\n' + 
       'Content-type: application/pkix-cert\r\n' + 'Content-Transfer-Encoding: binary\r\n' + 'Content-ID: <yyyy>\r\n\r\n'; 

    res.writeHead(200, "OK", {'Content-Type': 'multipart/related; charset=utf-8; boundary="abcd1234"; type="text/xml"; start="<SOAP-ENV:Envelope>"'}); 
    res.write(responseData); 
res.write(file); 
res.end('\n\r--abcd1234--'); 
}); 

server.listen(8008); 
+0

你不能在同一時間發送 – num8er

+0

響應與不同的內容類型得到它通過發送單獨的寫通話部分的工作,見上面。 – Kiikale

回答

-1

查看NodeJS中多部分/相關請求的示例。此示例顯示如何使用JSON和base64編碼的二進制數據格式化請求字符串。希望這可以幫助。

本地要求的NodeJS:

var http = require("https"); 

var options = { 
    "method": "POST", 
    "hostname": "examplehostname.com", 
    "port": null, 
    "path": "/path/v1/files", 
    "headers": { 
    "content-type": "multipart/related; boundary=Example_boundary_123456", 
    } 
}; 

var req = http.request(options, function (res) { 
    var chunks = []; 

    res.on("data", function (chunk) { 
    chunks.push(chunk); 
    }); 

    res.on("end", function() { 
    var body = Buffer.concat(chunks); 
    console.log(body.toString()); 
    }); 
}); 

req.write("--Example_boundary_123456\nContent-Type: application/json\nContent-Description: json\n \n{\n \"title\": \"Example Title\",\n \"description\": \"Exmaple desc......\",\n \"date\": 2016-08-31\n}\n \n--Example_boundary_123456\nContent-Type: application/pdf\nContent-Transfer-Encoding: base64\nContent-Description: document\n \nVGhlIFBsZWRnZSBvZiBBbGxlZ2lhbmNlIHRvIHRoZSBGbGFnOiCTSSBwbGVkZ2UgYWxsZWdpYW5j\nZSB0byB0aGUgRmxhZyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbmQgdG8gdGhl\nIFJlcHVibGljIGZvciB3aGljaCBpdCBzdGFuZHMsIG9uZSBOYXRpb24gdW5kZXIgR29kLCBpbmRp\ndmlzaWJsZSwgd2l0aCBsaWJlcnR5IGFuZCBqdXN0aWNlIGZvciBhbGwulCwgc2hvdWxkIGJlIHJl\nbmRlcmVkIGJ5IHN0YW5kaW5nIGF0IGF0dGVudGlvbiBmYWNpbmcgdGhlIGZsYWcgd2l0aCB0aGUg\ncmlnaHQgaGFuZCBvdmVyIHRoZSBoZWFydC4gV2hlbiBub3QgaW4gdW5pZm9ybSBtZW4gc2hvdWxk\nIHJlbW92ZSBhbnkgbm9uLXJlbGlnaW91cyBoZWFkZHJlc3Mgd2l0aCB0aGVpciByaWdodCBoYW5k\nIGFuZCBob2xkIGl0IGF0IHRoZSBsZWZ0IHNob3VsZGVyLCB0aGUgaGFuZCBiZWluZyBvdmVyIHRo\nZSBoZWFydC4gUGVyc29ucyBpbiB1bmlmb3JtIHNob3VsZCByZW1haW4gc2lsZW50LCBmYWNlIHRo\nZSBmbGFnLCBhbmQgcmVuZGVyIHRoZSBtaWxpdGFyeSBzYWx1dGUuIE1lbWJlcnMgb2YgdGhlIEFy\nbWVkIEZvcmNlcyBub3QgaW4gdW5pZm9ybSBhbmQgdmV0ZXJhbnMgbWF5IHJlbmRlciB0aGUgbWls\naXRhcnkgc2FsdXRlIGluIHRoZSBtYW5uZXIgcHJvdmlkZWQgZm9yIHBlcnNvbnMgaW4gdW5pZm9y\nbS4=\n \n--Example_boundary_123456"); 
req.end(); 
相關問題