Articles of requestjs

通过requestJS POST请求发送JSON对象和图像文件的数组

我正在使用NODEjs构buildREST API,使用Express路由器和Multer中间件来处理多个主体数据和文件。 我的端点路由127.0.0.1/api/postData期望:带有字段的json数据,其中之一是json对象数组(我有嵌套mongoose模式)和2个命名图像(png / jpg)。 我需要通过cURL发送Post请求与以下5对象的数据结构: name String description String usersArray Array of json objects like: [{"id": "123"}, {"id": "456}] imgIcon Png/Image providing /path/to/imageIcon.png imgHeader Png/Image providing /path/to/imageHeader.png 任何想法如何写request.js节点http请求库的帮助下请求库?

为什么requestjs拒绝与Firefox一起使用的自签名SSL证书?

这是情况。 我创build了一个自签名CA证书,并用它来签署第二个证书,以便与https一起使用。 Web服务器是nginx做SSL终止和反向代理expressjs应用程序。 为了validation信任链是否正确,我在Firefox中安装了CA,并能够按预期方式通过https访问网站,而不会出现警告。 此外,我可以使用openssl x509 -in server.crt -text -noout来检查服务器的证书,我可以看到预期的发行者,特别是该主题的预期通用名称。 (注意:这里使用的通用名称是IP地址,以防可能造成麻烦。) 但是,当我尝试使用requestjs通过nodejs脚本访问服务器时,事情并不顺利。 在脚本中,使用如下代码加载CA证书: request.get({url: theUrl, ca: fs.readFileSync("./ca.crt")}, … 但是我得到这个错误(为了可读性破坏了行,原来是一行): Contacting doorman failed: Error: Hostname/IP doesn't match certificate's altnames: "IP: <redacted> is not in the cert's list: " 特别可疑的是,这似乎是说“证书清单”是空的。 在其他答案中,在选项中使用rejectUnauthorized: false已经被提出,但对于这个应用程序来说这不是一个好的select,因为我想要进行身份validation。 我怎样才能让requestjs / nodejs信任这个证书? 服务器证书的内容,由openssl x509 -text报告 Certificate: Data: Version: 1 (0x0) Serial Number: 3 (0x3) […]

recursion函数的callback

以下代码用于从我们的Web应用程序获取.zip文件。 该文件是通过安全地closures另一个应用程序然后进行压缩生成的,最后发送下载。 var dl = function() { request({ method: 'GET', uri: 'some_url', headers: { 'User-Agent': 'Scripted-Download' }, encoding: null, jar: true }, function(err, res, body) { if (err) throw(err) if (res.headers['content-type'] === 'application/zip;charset=utf-8') { process.stdout.write('\rDownloading file ..') var id = uuid.v4() , file = path.resolve(__dirname, '../../' + id + '.zip') fs.writeFile(file, body, function(err) { if […]

asynchronous请求在node.js中的ForEach中

我是新的node.js(和request.js)。 我想从不同path的特定url获取网站正文(在http://www.example.com/path1下方的示例中, http://www.example.com/path2等) )并使用键/值映射(下面的siteData [path])将这些数据logging在一个对象中。 var request = require('request'), paths = ['path1','path2','path3'], siteData = {}, pathLength = paths.length, pathIndex = 0; paths.forEach((path) => { var url="http://www.example.com/"+path; request(url, function(error, response, html){ if(!error){ siteData[path] = response.body; pathIndex++; if(pathIndex===pathLength){ someFunction(siteData); } } }); function someFunction(data){ //manipulate data } 我的问题是: if语句(index ===长度)看起来不像是确定asynchronous请求是否完成的正确方法。 我该如何正确检查请求是否完成? 当我执行上面的代码时,我得到一个错误(node) warning: possible EventEmitter memory leak […]

Node.js和Requestjs:将一个Transformstream传递给Request.js作为上传文件

我正在使用node-archiver( https://github.com/archiverjs/node-archiver )在内存上创build一个zip文件。 使用存档器的pipe道function,我将所有内容都pipe理到一个转换stream。 如果需要,我可以将这个stream传给一个文件,但是我想让Request( https://github.com/request )读取这个stream,所以我不必去文件系统。 下面,我的转换stream被称为bridge 。 我没有做任何特殊的变换(我相信它也可能是一个PassThroughstream)。 var archive = archiver('zip'); archive.pipe(bridge); var r = request.post(url, function(err, res, body){ …. } var form = r.form(); form.append('token', <some token>); form.append('file', bridge, { "filename" : "package.zip", "contentType" : "application/zip" }); archive.append(<some string>, { "name": <some file name> }); archive.finalize(); 这不起作用(似乎file部分是空的)。 但是,如果我pipe道我的桥转换stream到一个文件写入stream – 并在stream完成后 – […]

request.js失败,其中CURL通过授权标头成功获取GET请求

我可以使用curl的Authorization头进行GET请求,但不能使用Node.js中的request或https进行request 。 服务器使用curl返回状态200,使用request或https返回500。 来自request或https request可能与curl不同? 服务器如何以不同的方式读取它们? 以下cURL从命令行成功执行: curl -H "Authorization: Bearer abc123def456" https://api.domain.com/path/to/resource 但同样的请求失败,在Node中的request.js var options = { type: 'get', url: "https://api.domain.com/path/to/resource", headers: { "Authorization": " Bearer abc123def456" } } request(options, function (err, response, body) { assert.equal(response.statusCode, 200) ; // 500 internal error }) 使用auth选项,request.js也失败了: var options = { type: 'get', url: "https://api.domain.com/path/to/resource", auth: { […]

即使已经解决,承诺也会挂起

我正在使用request-promise模块来检查网站是否与代理工作。 我试图find代理速度足以在5秒内回答。 因此,如果请求在5秒内没有超时,我只添加对象。 对于某些代理,即使承诺解决,节点脚本暂停一段时间。 我找不到拖延的原因。 我看到它打印Done但它挂起。 1分10秒后,脚本退出。 这是挂起由于我的代码,或操作系统问题打开套接字等? const rp = require('request-promise'); const testProxies = [ { "ipAddress": "80.241.219.83", "port": 3128, }, { "ipAddress": "45.55.27.246", "port": 80 }, { "ipAddress": "144.217.197.71", "port": 8080, }, { "ipAddress": "104.131.168.255", "port": 80, }, ]; function CheckSites(sitesArray,site) { let ps = []; for (let i = 0; i < […]

Node.JS请求 – 无效的URI“/”

我在我的应用程序中使用request通过使用客户端身份validation的HTTPS发送POST请求。 请求总是抛出一个错误Error: Invalid URI "/" ,我无法做任何事情来解决它。 我已经尝试使用url.parse而不是传递一个string,但它仍然是相同的。 request.post({ uri: 'https://localhost:5000', key: credentials.key, ca: credentials.ca, cert: credentials.cert, passphrase: credentials.passphrase, rejectUnauthorized: false }, { form: { data: payload }});

从nodejs请求到s3的stream响应

你如何使用请求下载一个文件的内容,并直接使用aws-sdk作为节点将其传输到s3? 下面的代码给我的Object #<Request> has no method 'read' ,这使得它看起来像请求不会返回一个可读的stream… var req = require('request'); var s3 = new AWS.S3({params: {Bucket: myBucket, Key: s3Key}}); var imageStream = req.get(url) .on('response', function (response) { if (200 == response.statusCode) { //imageStream should be read()able by now right? s3.upload({Body: imageStream, ACL: "public-read", CacheControl: 5184000}, function (err, data) { //2 months console.log(err,data); }); […]

在AJAX调用(使用ExpressJS)之后,通过EJS模板中的数组循环的正确方法是什么?

所以我试图循环通过一个http调用使用request模块/包使用我的内部API的对象数组。 到目前为止,我能够从API中获取数据,并在页面上显示完整的对象。 我想将其显示在我的页面上,并使用EJS模板系统进行循环。 我知道我可以使用AngularJS作为前端的东西,但我想看看我只能在服务器端使用多远。 所以下面是我的代码: server.js // Prepend /api to my apiRoutes app.use('/api', require('./app/api')); api.js var Report = require('./models/report'); var express = require('express'); var apiRoutes = express.Router(); apiRoutes.route('/reports', isLoggedIn) .get(function (req, res,next) { // use mongoose to get all reports in the database Report.find(function (err, reports) { // if there is an error retrieving, send […]