如何在Node.js中模拟POST请求之后访问响应体?

我现在一直在尝试这个很长一段时间。 我想要从具有成人内容的subreddit中取消内容。 但是,问题是,你必须回答一个简单的问题,才能访问该页面,即如果你是18+或不。 我做了一些关于源代码的研究,发现这个解决scheme是一个简单的POST请求。 你需要发送参数“over18 = yes”。 但我的问题是,我无法访问post后的响应主体。

这里是在节点中使用http请求的代码。 我甚至用节点“请求”模块尝试过,但没有任何帮助。

希望find能够帮助我的人。

var http = require("http"); var options = { host: 'www.reddit.com', port: 80, path: '/over18?dest=http%3A%2F%2Fwww.reddit.com%2Fr%2Fnsfw&over18=yes', method: 'POST' }; var req = http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) { console.log('problem with request: ' + e.message); }); // write data to request body req.write('data\n'); req.write('data\n'); req.end(); 

这里是使用Node Request模块的代码

 var request = require("request"); request.post({url:'http://www.reddit.com/over18?dest=http%3A%2F%2Fwww.reddit.com%2Fr%2Fnsfw', form: {over18:'yes'}}, function(err,httpResponse,body){ console.log(body); }); 

我尝试访问的URL是http://www.reddit.com/r/nsfw

简而言之,当您单击是button时,表单将使用POST方法发送over18 = yes参数到url http://www.reddit.com/over18?dest=http%3A%2F%2Fwww.reddit.com%2Fr%2Fnsfw 。 然后,服务器使用302redirect标头,值超过18 = 1的 cookie进行响应 ,最后使用GET请求redirect到http://www.reddit.com/r/nsfw 。 那么,服务器只是检查你是否有必要的cookie的cookie。

所有你需要的是使用GET方法直接向cookie请求最终的URL。

 var request = require("request"); var target = "http://www.reddit.com/r/nsfw"; var jar = request.jar(); var cookie = request.cookie("over18=1"); cookie.domain = "reddit.com"; cookie.path = "/"; jar.setCookie(cookie, target, function(error, cookie) { console.log(error); console.log(cookie); }); request({ uri: target, method: "GET", jar: jar }, function(error, response, body) { console.log(response.statusCode); console.log(body); }); 

我也遇到了这个问题,同时做一些研究..这是我的版本:

 var url = 'http://www.reddit.com/r/nsfw/'; var request = require('request'); request = request.defaults({jar: true }); request.post({ followAllRedirects: true, url: 'http://www.reddit.com/over18?dest=' + encodeURIComponent(url), form: {uh: '', over18: 'yes', } }, function(err, httpResponse, html) { … }); 

另外值得一试的是Reddit的Node.js API ,我个人喜欢Snoocore 。