Tag: 请求

顺序承诺,同时传递价值

我正在玩命运API,我遇到了一些问题。 如果我请求一个字符的详细信息,它会返回一个对象,但是这些值是ID,然后需要将其传递给另一个API调用“清单”,该清单返回该ID的对象。 我正在使用'request-promise'来进行API调用,但这意味着我不得不嵌套调用,我不觉得高兴。 我需要保留一些来自第一个请求的数据,然后再打一个电话来获得最后一个数据。 例如: request('destiny-character-api') .then(character => { // Keep some of the data from character, eg className request(`destiny-manifest-api/${character.item}`) .then(item => { // Overwrite character.item with the value of item.name return item; }); }); 我需要一种方法来阻止第二个请求,直到第一个请求返回,然后将返回值传递给第二个请求。 谢谢

为会话设置服务器端cookie的正确方法

我有以下function,当用户点击某个端点时,在服务器上调用,例如/api/login我在服务器上处理它,因为我想设置服务器端Cookie来存储身份validation令牌。 目前看起来像这样: const createSession = (req, res, url) => { const apiCall = request.post(url, (err, response, body) => { // eslint-disable-line if (err) return res.sendStatus(500); else if (response.statusCode !== 200) return res.status(response.statusCode).send(body); const data = JSON.parse(body); const options = { path: '/', hostOnly: true, httpOnly: true, maxAge: 3300000 }; // 55 min expiration if (secrets.DOMAIN […]

使用NodeJS从url下载大文件时,服务器崩溃

我试图从nodejs使用请求模块从url(需要login)下载一个文件(+ 200mb),但是当它完成下载时,服务器开始减速,直到崩溃或变得非常慢。 这是我目前的代码(它下载整个文件,但我的服务器最终崩溃): //Required modules var http = require('http'), url = require("url"), fs = require('fs'), request = require('request'), path = require("path"), events = require("events"), j = request.jar(), request = request.defaults({ jar : j }); // make te request login in with cookies console.log("downloading file :)"); request({ url:"http://example.com/", method:"POST", form:{u: "username",p: "password"} }, function(error,response,body){ setTimeout(function(){ request […]

Node.js发送带有base64解码字符的POST请求时,出现无效字符错误

我想用base64解码的string发送POST请求,但是我得到无效的字符错误。 我有这个块来生成base64解码的string: var domain = "domain.com"; var decoded = Buffer.from("x3abaARV"+domain+"1cYNYtk", 'base64').toString('ascii'); 然后我使用request模块从npm发送POST请求: var headers = { ip: "10.100.0.420", key: decoded, domain: domain } var options = { url: 'http://somedomain.com/foo/bar/example.json', method: 'POST', headers: headers, } request(options, (error, response, body) => { if (error) { console.log(error); } … 它返回: ypeError:在Object.exports.request(http.js:31:10)的新ClientRequest(_http_client.js:86:14)处,ClientRequest.OutgoingMessage.setHeader(_http_outgoing.js:358:11)在Request.nd(/ home / kuno / code / aviokarte-web […]

当累计块的大小大于阈值时如何结束http响应stream

我试图从url列表中下载一些文件,但是我不想下载任何超过一定大小的文件(比如说1mb)。 这些文件可能是千兆字节,所以我需要一种方法来取消下载响应stream增长大于1mb。 let request = require("request"); function getFile(url, callback) { request.get(url) .on('response', function(response) { let output = ""; response.on('data', function(chunk) { if(output.length > 1000000) { // ??? ABORT STREAM HERE ??? console.log(`${url} is too big`); callback(true); } else { output += chunk.toString("utf8"); } }); response.on('end', function() { console.log(`${url} download complete`); callback(null, output); }); }); } […]

获取在Express中请求路由的域

如果我有这个客户端应用程序运行在端口3000上,并且在我的API中build立在ExpressJS之上,在端口8080上运行,我怎么知道请求是在localhost:3000上发起的呢? 我听说有人在用: req.get('host') //or origin req.headers.host //or origin origin不存在,主机返回localhost:8080 ,即服务器端。 我想要客户的地址。 为什么在ExpressJS上获取这些信息非常困难? 任何人都知道我该怎么做?

在封闭的方法中在Node JS Express请求中访问POST响应数据

我在这里抨击NodeJ的学习曲线。 我有一个应用程序在节点的JS Express使用请求进行POST到另一个API。 通话正常,我的控制台日志显示正确的数据回来。 我的问题是如何从request.post(…)中获取该响应,并在发出请求的方法中使用它。 这是我的场景。 外部应用程序调用我的API。 我的API必须调用另一个API来获取一些数据来检查更新。 (我有一个API发出POST请求,以响应来自外部应用程序的POST请求。) 这是我的API中的方法,它向第三方请求一些数据。 我需要从这个POST响应中获取数据,在响应外部应用程序的POST请求之前将其返回。 exports.getUpdates = function(variable1, variable2, variable3) { request.post( 'http://myurl.exp/api//getUpdates', {json: {var1: variable1, …}}, function (error, response, body) { if(!error && response.statusCode == 200) { console.log(body); } else {console.log(error);} } ); <I need to have this method return the response to the controller that called this […]

NodeJS'请求'模块:HTTP POST返回415

我正在使用节点模块“请求”来发出POST请求,甚至在尝试了许多不同的内容types变体之后,例如: 'content-type': 'application/json' 我仍然得到一个415(不支持媒体types)的回应。 以下是我的function: var createNetworkResource = function (resourceName, inputDirectory) { request.post({url:browser.params.baseRestUrl + 'resources/connections', auth: browser.params.auth, form: {method:'POST', headers: {'content-type': 'application/json'}, displayName: "RESOURCE_TEST", name: "RESOURCE_TEST", type: "NETWORK", }}, function(e,r,user){ console.log("Status code of createNetworkResource('" + resourceName + "'): " + r.statusCode);}); }; 我已经尝试了从stackoverflow不同的解决scheme,但没有一个工作,我找不到一个特定于此节点模块。

是否有可能在node.js请求中设置无限超时?

我正在使用'请求'node.js模块( https://github.com/request/request )发送请求到另一个服务。 有时需要发送请求并无限期地等待响应,因为发送请求的服务缓慢。 可以为请求设置“超时”属性,通过这种方式,您将覆盖读取和连接超时的默认值: timeout – 整数,包含等待服务器发送响应头(并启动响应正文)的毫秒数,然后中止请求。 请注意,如果无法build立底层的TCP连接,OS范围的TCP连接超时将会取消超时选项(Linux中的默认值可以在20-120秒之间)。 但是,我们可以设置什么值使这个超时无限?

通过节点stream式传输连续的HTTP响应

我试图作为客户端和使用NodeJS服务器的IP摄像机之间的代理。 当我请求来自相机的实时stream时,它响应 HTTP/1.0 200 OK Content-Type: Application/octet-stream 随后是连续的数据stream。 如果我在Chrome中打开相机stream,它会启动一个永不停止的下载,并启动一个连续的响应。 Node似乎是缓冲来自摄像机的响应,并且每次都通过它的HTTPparsing器parsing它。 这是第一次正常工作,因为它有正确的标题,但它的错误与第二个数据缓冲区 HPE_INVALID_HEADER_TOKEN 有人可以请帮忙解释为什么发生这种情况? 这是一个连续的数据stream,为什么它试图parsing第二个缓冲区的HTTP头? 我不确定是否有我缺less的选项,或者我的相机没有正确遵循HTTP规范。 编辑:示例代码 const options = { family: 4, headers: { Authorization: 'Basic ' + base64EncodedAuth, }, host: '192.168.1.131', method: 'GET', path: '/cgi-bin/realmonitor.cgi?action=getStream&channel=1&subtype=0', port: 80, protocol:'http:', }; const req = http.request(options, (res) => { console.log(`STATUS: ${res.statusCode}`); console.log(`HEADERS: ${JSON.stringify(res.headers)}`); res.on('data', (chunk) => { […]