2017-04-11 104 views
0

如何使用https/http模塊使用GET方法發送數據?隨着POST一切正常。Node.js http - 將GET數據發送到服務器

第一代碼GET):

var querystring = require('querystring'), 
    protocol = require('https'); 

var options = { 
    host: 'httpbin.org', 
    path: 'get', 
    method: 'GET', 
    headers: {}, 
    port: 443 
}; 

var data = querystring.stringify({ 
    limit: 3 
}); 

Object.assign(options.headers, { 
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
    'Content-Length': Buffer.byteLength(data) 
}); 

var req = protocol.request(options, response => { 
    response.setEncoding('utf8'); 
    var end = ''; 
    response.on('data', data => end += data); 
    response.on('end',() => console.log(end)); 
}); 
req.write(data); 
req.end(); 

響應:

{ 
    "args": {}, 
    "headers": { 
    "Connection": "close", 
    "Content-Length": "7", 
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 
    "Host": "httpbin.org" 
    }, 
    "origin": "31.0.120.218", 
    "url": "https://httpbin.org/get" 
} 

第二代碼POST,我只更換選項對象):

var options = { 
    host: 'httpbin.org', 
    path: 'post', 
    method: 'POST', 
    headers: {}, 
    port: 443 
}; 

響應:

{ 
    "args": {}, 
    "data": "", 
    "files": {}, 
    "form": { 
    "limit": "3" 
    }, 
    "headers": { 
    "Connection": "close", 
    "Content-Length": "7", 
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 
    "Host": "httpbin.org" 
    }, 
    "json": null, 
    "origin": "31.0.120.218", 
    "url": "https://httpbin.org/post" 
} 

我將是一些幫助非常感謝,現在我不知道我做錯了。

+0

不是真的是node.js問題。對於GET,您不會將數據發佈到主體中,因爲它不是http規範的一部分。 GET方法通常用於查詢事物。您通過URL發送查詢參數。希望這可以幫助。 – Quy

回答

2

你的問題是,在get中,查詢被追加到路徑中,就像@Quy指出的那樣,獲取請求沒有正文。沒有了解如何設置服務器,我會這樣看待:

var data = querystring.stringify({ 
    limit: 3 
}); 

var options = { 
    host: 'httpbin.org', 
    path: 'get?' + data, 
    method: 'GET', 
    headers: {}, 
    port: 443 
}; 
+0

是的,它的工作原理;) –