我正在尝试GET使用二进制数据request,并有类似的东西:
var requestSettings = {
method: 'GET',
url: url,
};
request(requestSettings, function(error, response, body) {
// Use body as a binary Buffer
}
Run Code Online (Sandbox Code Playgroud)
但body总是与预期的几个字节不同.经过进一步调查后,我发现request假设body是字符串并替换了所有非unicode字节.
我试着补充一下
encoding: 'binary'
Run Code Online (Sandbox Code Playgroud)
到requestSettings,但它并没有帮助.
我怎样才能获得二进制数据?
所以我试图使用request模块/包将我从http调用使用的对象数组循环到我的内部API .到目前为止,我能够从API中获取数据并在我的页面上显示完整对象.我想在我的页面上显示它并使用EJS模板系统循环它.我知道我可以使用AngularJS作为前端的东西,但我想看看我能在多大程度上只用服务器端.
以下是我的代码:
server.js
// Prepend /api to my apiRoutes
app.use('/api', require('./app/api'));
Run Code Online (Sandbox Code Playgroud)
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 the error.
// nothing after res.send(err) will execute
if (err)
return res.send(err);
res.json(reports);
});
});
Run Code Online (Sandbox Code Playgroud)
routes.js
var User = require('./models/user');
var request = require('request');
module.exports …Run Code Online (Sandbox Code Playgroud) 我request在我的应用程序中使用POSTHTTPS通过客户端身份验证发送请求.请求总是抛出一个错误Error: Invalid URI "/",我无法解决它.我尝试使用url.parse而不是传递一个字符串,但它仍然是相同的.
request.post({
uri: 'https://localhost:5000',
key: credentials.key,
ca: credentials.ca,
cert: credentials.cert,
passphrase: credentials.passphrase,
rejectUnauthorized: false
}, { form: { data: payload }});
Run Code Online (Sandbox Code Playgroud) 你如何使用请求下载文件的内容,并使用节点的aws-sdk直接将其流式传输到s3?
下面的代码给了我Object #<Request> has no method 'read'看起来像请求不返回可读流...
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);
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
根据aws-sdk文档 Body需要成为一个ReadableStream对象.
我在这做错了什么?
这可以使用s3-upload-stream模块取消,但是我更愿意限制我的依赖关系.
执行GET请求时出现错误。
Error: read ECONNRESET
at TLSWrap.onStreamRead (internal/stream_base_commons.js:111:27) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' }
Run Code Online (Sandbox Code Playgroud)
当我尝试向GET请求时会发生这种情况,https://www.adidas.co.uk/api/search/taxonomy?query=men但是当我使用时它会起作用https://jsonplaceholder.typicode.com/api/todos/1。
请求:
var request = require('request');
[...]
app.use('/api', cacheMiddleware(), function (req, out) {
var headers = {
//'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0',
'Content-Type': 'application/x-www-form-urlencoded'
//'Content-Type': 'application/jsond'
};
var url = getDestinationUrl(req);
if (req.method === 'POST') {
console.log('POST body:')
console.log(req.body);
result = request.post({ uri: url, json: req.body, headers: headers, followRedirect: true , maxRedirects: 10}, function (error, response, …Run Code Online (Sandbox Code Playgroud) 我正在使用请求承诺库并尝试根据其文档将超时设置为毫秒。我在服务器端很少有请求需要超过一分钟才能响应,无论我为超时设置什么值,请求总是在一分钟后超时。在请求中设置读取超时的正确方法是什么?
我的请求
rp({
uri: "http://something.com/long_running_request",
timeout: 180000
})
Run Code Online (Sandbox Code Playgroud) 我想强制浏览器从外部存储器下载文件,给定一个URL.我实现了这个快速控制器后期操作:
var download = function(req, res) {
request(req.body.url).on('response', function(response) {
res.set({
'Content-Disposition': 'attachment; filename=' + req.body.filename,
'Content-Type': response.headers['content-type']
});
})
.pipe(res);
};
Run Code Online (Sandbox Code Playgroud)
我不知道为什么浏览器总是收到"内联"而不是"附件",避免我下载文件.
在这种情况下,我使用express和request,服务器托管在Heroku上,托管文件的服务器是FilePicker.
我必须将远程文件的二进制内容发送到API端点.我使用请求库读取远程文件的二进制内容并将其存储在变量中.现在变量中的内容已准备好发送,如何使用请求库将其发布到远程api.
我现在和不起作用的是:
const makeWitSpeechRequest = (audioBinary) => {
request({
url: 'https://api.wit.ai/speech?v=20160526',
method: 'POST',
body: audioBinary,
}, (error, response, body) => {
if (error) {
console.log('Error sending message: ', error)
} else {
console.log('Response: ', response.body)
}
})
}
Run Code Online (Sandbox Code Playgroud)
我们可以安全地假设这里audioBinary有从远程文件中读取的二进制内容.
当我说它不起作用时,我的意思是什么?
有效负载在请求调试中显示不同.实际二进制有效负载:ID3TXXXmajor_brandisomTXXXminor_version512TXXX
调试时显示有效负载:ID3\u0004\u0000\u0000\u0000\u0000\u0001\u0006TXXX\u0000\u0000\u0000\
什么在终端有效?
我所知道的终端工作的不同之处在于它也在同一个命令中读取文件的内容:
curl -XPOST 'https://api.wit.ai/speech?v=20160526' \
-i -L \
--data-binary "@hello.mp3"
Run Code Online (Sandbox Code Playgroud) 我正在使用request-promise模块来检查网站是否正在使用代理.我试图找到足够快的代理,在5秒内回答.因此,如果请求在5秒内没有超时,我只会添加对象.
对于某些代理,即使promise解析,节点脚本也会挂起一段时间.我找不到这种延误的原因.我看到它打印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 < sitesArray.length; i++) {
let proxy = sitesArray[i];
let ops = {
method: 'GET',
resolveWithFullResponse: true,
proxy: 'http://' + proxy.ipAddress + ':' + proxy.port,
uri:site,
};
let resp …Run Code Online (Sandbox Code Playgroud) 我正在尝试向连接到 lambda 函数的 AWS API Gateway 终端节点发出 GET HTTP 请求。
\n\n当使用邮递员进行测试时,端点和 lambda 函数照常工作,这是合乎逻辑的,因为邮递员不使用 CORS。
\n\n但是,在 chrome 上的 firefox 上测试时,出现以下错误:
\n\n火狐浏览器:
\n\n\n\n\n跨源请求被阻止:同源策略不允许读取 [ url ] 处的远程资源(原因:CORS 标头 \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 丢失)。
\n
铬合金:
\n\n\n\n\n从源“ http://localhost:8080 ”获取 [ url ] 的访问已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。
\n
但是,如果我查看 CORS 预检请求的响应,我会看到存在“Access-Control-Allow-Origin”:
\n\n\nHTTP/2.0 200 OK
\n 日期:2019 年 3 月 12 日星期二 15:22:57 GMT
\n 内容类型:application/json
\n 内容长度:0
\n x-amzn-requestid:[x-amzn-requestid ]
\n 访问控制允许来源:*
\n 访问控制允许标头:内容类型、X-Amz-日期、授权、X-Api-Key、X-Amz-安全令牌
\n …