我正在尝试使用nodejs和请求 [2] 向谷歌QPX Express API [1]发出HTTP POST请求.
我的代码如下:
// create http request client to consume the QPX API
var request = require("request")
// JSON to be passed to the QPX Express API
var requestData = {
"request": {
"slice": [
{
"origin": "ZRH",
"destination": "DUS",
"date": "2014-12-02"
}
],
"passengers": {
"adultCount": 1,
"infantInLapCount": 0,
"infantInSeatCount": 0,
"childCount": 0,
"seniorCount": 0
},
"solutions": 2,
"refundable": false
}
}
// QPX REST API URL (I censored my api …Run Code Online (Sandbox Code Playgroud) function getCookies(){
request('http://google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(response.headers);
}
})
}
Run Code Online (Sandbox Code Playgroud)
结果
{ date: 'Fri, 11 Dec 2015 07:15:50 GMT',
expires: '-1',
'cache-control': 'private, max-age=0',
'content-type': 'text/html; charset=EUC-KR',
p3p: 'CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."',
server: 'gws',
'x-xss-protection': '1; mode=block',
'x-frame-options': 'SAMEORIGIN',
'set-cookie':
[ 'PREF=ID=1111111111111111:FF=0:TM=1449818150:LM=1449818150:V=1:S=Q3BB20FA6TkaZymd; expires=Thu, 31-Dec-2015 16:02:17 GMT; path=/; domain=.google.co.kr',
'NID=74=hnriWxk7N9jHtP5W0qgaxrwD1YuNKOmJg748ucxWilu9jaqHJVovfkYdvMr0tlp-VToID5cdTNDSXNXqr4M8umJ9traab67x2xZKfu3hJbsBRXeVvyiCOcwZ8bkXNcU4; expires=Sat, 11-Jun-2016 07:15:50 GMT; path=/; domain=.google.co.kr; HttpOnly' ],
'accept-ranges': 'none',
vary: 'Accept-Encoding',
connection: 'close' } …Run Code Online (Sandbox Code Playgroud) 我使用Node.js的-异步及请求模块抓取100+百万计的网站,我不断碰到的错误ESOCKETTIMEDOUT及ETIMEDOUT几分钟后.
重新启动脚本后它再次起作用.它似乎不是连接限制问题,因为我仍然可以执行resolve4,resolveNs,resolveMx,也curl没有延迟.
你看到代码有什么问题吗?或任何建议?我想把async.queue()并发推高到至少1000.谢谢.
var request = require('request'),
async = require('async'),
mysql = require('mysql'),
dns = require('dns'),
url = require('url'),
cheerio = require('cheerio'),
iconv = require('iconv-lite'),
charset = require('charset'),
config = require('./spy.config'),
pool = mysql.createPool(config.db);
iconv.skipDecodeWarning = true;
var queue = async.queue(function (task, cb) {
dns.resolve4('www.' + task.domain, function (err, addresses) {
if (err) {
//
// Do something
//
setImmediate(function () {
cb()
});
} else {
request({
url: 'http://www.' + task.domain,
method: 'GET', …Run Code Online (Sandbox Code Playgroud) 我无法在reddit/r/redditdev上得到任何帮助,所以我希望你在stackoverflow的好人可以帮助
我正打算打电话给/ api/submit.
现在我尝试使用nodejs的请求模块调用提交
var options = {
url: 'https://oauth.reddit.com/api/submit',
method: 'POST',
headers: {
'Authorization': 'bearer '+usertoken
, 'user-agent': 'node.js'
},
json: data
}
request(options, function(error, response, body) ...
Run Code Online (Sandbox Code Playgroud)我的"数据"变量的示例如下所示:
{ api_type: 'json',
kind: 'self',
sr: 'test',
title: 'more test',
text: 'hello world',
iden: 'o6NsDh4IMCDb2To2DeUXJAgEPkB4O7uS',
captcha: 'WZRTBL' }
Run Code Online (Sandbox Code Playgroud)
但我得到了回报:
{
"jquery":[
[0, 1, "call", ["body"]],
[1, 2, "attr", "find"],
[2, 3, "call", [".status"]],
[3, 4, "attr", "hide"],
[4, 5, "call", []], …Run Code Online (Sandbox Code Playgroud) 我在我的组件的componentWillMount调用中抓取了我的数据[实际上它是在mixin中,但同样的想法].在ajax调用返回后,我尝试setState,但是我得到了文档未定义的错误.
我不知道怎么解决这个问题.有什么值得期待的吗?承诺或回调我应该在做setState吗?
这就是我想要做的:
componentWillMount: function() {
request.get(this.fullUrl()).end(function(err, res) {
this.setState({data: res.body});
}.bind(this));
}
Run Code Online (Sandbox Code Playgroud) 我正在调用bitbucket API来获取repo中的所有文件.我已达到这样的程度,我可以获取repo中所有文件夹的列表,并对repo中的所有根文件夹进行第一次API调用,并获取所有文件夹的前1000个文件列表.
但问题是bitbucket api一次只能给我每个文件夹1000个文件.
我需要附加一个查询参数&start = nextPageStart并再次进行调用,直到它为null并且每个API的isLastPage为true.如何使用以下代码实现这一目标?
我从第一次调用api获得nextPageStart.请参阅下面的API响应.
下面是我到目前为止的代码.
任何帮助或指导表示赞赏.
来自每个文件夹调用的各个API的响应.
{
"values": [
"/src/js/abc.js",
"/src/js/efg.js",
"/src/js/ffg.js",
...
],
"size": 1000,
"isLastPage": false,
"start": 0,
"limit": 1000,
"nextPageStart": 1000
}
Run Code Online (Sandbox Code Playgroud)
函数,我进行异步调用以获取文件列表
export function getFilesList() {
const foldersURL: any[] = [];
getFoldersFromRepo().then((response) => {
const values = response.values;
values.forEach((value: any) => {
//creating API URL for each folder in the repo
const URL = 'https://bitbucket.abc.com/stash/rest/api/latest/projects/'
+ value.project.key + '/repos/' + value.slug + '/files?limit=1000';
foldersURL.push(URL);
});
return foldersURL;
}).then((res) => {
// …Run Code Online (Sandbox Code Playgroud) 我一直在努力成功下载图像而不用它将它传递给fs.这就是我所取得的成就:
var Promise = require('bluebird'),
fs = Promise.promisifyAll(require('fs')),
requestAsync = Promise.promisify(require('request'));
function downloadImage(uri, filename){
return requestAsync(uri)
.spread(function (response, body) {
if (response.statusCode != 200) return Promise.resolve();
return fs.writeFileAsync(filename, body);
})
.then(function () { ... })
// ...
}
Run Code Online (Sandbox Code Playgroud)
有效输入可能是:
downloadImage('http://goo.gl/5FiLfb', 'c:\\thanks.jpg');
Run Code Online (Sandbox Code Playgroud)
我确实认为问题在于处理问题body.我已经尝试将其转换为Buffer(new Buffer(body, 'binary')等)几种编码,但都失败了.
感谢前方的任何帮助!
这是我正在运行的系统的一些背景信息:
Ubuntu v 14.04
节点v4.4.0
节点request模块v2.69.0
所有这些都在位于纽约的中心的DigitalOcean Droplet /服务器上.
所以我运行以下js文件:
var request = require('request');
var url = 'http://www.supremenewyork.com/';
request(url, function(err, res, body) {
if (err) {
console.log(err);
return;
}
console.log('body:', body);
});
Run Code Online (Sandbox Code Playgroud)
在我的水滴上.大约70-80%的时间我尝试这个,现在每次尝试这个,我都会得到一个ETIMEDOUT错误:
{ [Error: connect ETIMEDOUT 52.6.25.180:80]
code: 'ETIMEDOUT',
errno: 'ETIMEDOUT',
syscall: 'connect',
address: '52.6.25.180',
port: 80 }
Run Code Online (Sandbox Code Playgroud)
值得注意的是,错误似乎出现在"波浪"中.也就是说,我会设法在一段时间内收到一些请求,然后是一系列ETIMEDOUT错误.错误的发生频率超过了我能够通过大约3:1的错误与成功之间的比率来获得我的请求.
在我自己的计算机上(运行OS X El Capitan的Mac),运行给定站点的js文件可以100%成功(即我之前从未遇到过这个问题)...所以我不确定为什么会出现这个问题包含在我的水滴中.
任何指针将不胜感激.
为什么我不能ping herokuapp < - 开始更好地了解这里发生的事情......
在节点js上出现http GET请求的问题 < - …
hosting network-programming node.js digital-ocean node-request
我使用Express将请求代理到受OAuth 2访问令牌保护的单独API服务器.当令牌过期时,服务器将返回一个401,我现在正在我的路由器中间件中处理,然后去刷新与客户端会话关联的访问令牌(我正在使用express-session).
这是我的代码:
router.js
app.use('/api', require('./routes.js'));
routes.js
var express = require('express'),
router = express.Router(),
routesController = require('./routes.controller.js');
router.route('/*')
.get(routesController.fetch);
Run Code Online (Sandbox Code Playgroud)
routes.controller.js
module.exports.fetch = function(req, res, next) {
var options = helpers.buildAPIRequestOptions(req);
request(options, function(err, response, body){
if(response.statusCode === 401) {
authController.refreshToken(req, res, next);
} else {
res.status(response.statusCode).send(body);
}
});
};
Run Code Online (Sandbox Code Playgroud)
authController
module.exports.refreshToken = function(req, res, next) {
var formData = {
grant_type: 'refresh_token',
refresh_token: req.session.refreshToken,
scope: 'PRODUCTION'
},
headers = {
'Authorization' : 'Basic ' + consts.CLIENT_KEY_SECRET_BASE64_DEV
};
request.post({url:consts.ACCESS_TOKEN_REQUEST_URL_DEV, form:formData, …Run Code Online (Sandbox Code Playgroud) 是否可以将 JSON 数据直接保存到 Firebase Firestore?
我尝试保存下面的 json 数据,
[{"id":"1234","name":"Chair","symbol":"CHR"}]
Run Code Online (Sandbox Code Playgroud)
request({url: 'https://api.example.com/v1/data', json: true}, function (error, response, body) {
if (!error && response.statusCode === 200) {
res.send(body);
console.log(body);
}
else {
console.log(response.statusCode + " " + error);
}
db.collection('market').doc('price').set(body);
});
Run Code Online (Sandbox Code Playgroud)
错误:参数“数据”不是有效的文档。Input 不是一个普通的 JavaScript 对象。
JSON.parse() 用于正文
db.collection('market').doc('price').set(JSON.parse(body));
Run Code Online (Sandbox Code Playgroud)JSON.stringify() 用于正文
db.collection('market')doc('price').set(JSON.stringify(body));
Run Code Online (Sandbox Code Playgroud)我仍然收到错误。
node-request ×10
node.js ×9
express ×2
javascript ×2
json ×2
async.js ×1
bluebird ×1
cookies ×1
curl ×1
firebase ×1
fs ×1
hosting ×1
middleware ×1
promise ×1
reactjs ×1
reddit ×1
typescript ×1