app: request retry
This commit is contained in:
parent
a65934834b
commit
bab3295ff4
|
|
@ -4,6 +4,7 @@ module.exports = {
|
|||
cacheExpire: process.env.CACHE_EXPIRE || 5 * 60, // 缓存时间,单位为秒
|
||||
ua: process.env.UA || 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
|
||||
listenInaddrAny: process.env.LISTEN_INADDR_ANY || 1, // 是否允许公网连接,取值 0 1
|
||||
requestRetry: process.env.REQUEST_RETRY || 2, // 请求失败重试次数
|
||||
redis: {
|
||||
url: process.env.REDIS_URL || 'redis://localhost:6379/',
|
||||
options: {
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
"dependencies": {
|
||||
"art-template": "4.12.2",
|
||||
"axios": "0.18.0",
|
||||
"axios-retry": "3.1.0",
|
||||
"cheerio": "1.0.0-rc.2",
|
||||
"co-redis": "2.1.1",
|
||||
"crypto": "1.0.1",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const JSONbig = require('json-bigint');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
const cheerio = require('cheerio');
|
||||
const iconv = require('iconv-lite');
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
const iconv = require('iconv-lite');
|
||||
|
|
|
|||
|
|
@ -1,22 +1,21 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const category = ctx.params.category;
|
||||
const url = `http://news.cctv.com/${category}/data/index.json`
|
||||
const url = `http://news.cctv.com/${category}/data/index.json`;
|
||||
|
||||
const response = await axios({
|
||||
method: 'get',
|
||||
url: url,
|
||||
headers: {
|
||||
'User-Agent': config.ua,
|
||||
'Referer': url,
|
||||
}
|
||||
Referer: url,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const list = data.rollData;
|
||||
const article_item = [];
|
||||
|
||||
ctx.state.data = {
|
||||
title: `央视新闻 ${category}`,
|
||||
|
|
@ -26,7 +25,7 @@ module.exports = async (ctx) => {
|
|||
title: item.title,
|
||||
description: item.description,
|
||||
link: item.url,
|
||||
pubDate: new Date(item.dateTime).toUTCString()
|
||||
pubDate: new Date(item.dateTime).toUTCString(),
|
||||
})),
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
const iconv = require('iconv-lite');
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const response = await axios({
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const city = ctx.params.city;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const response = await axios({
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const crypto = require('crypto');
|
||||
const config = require('../../config');
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../../utils/axios');
|
||||
const maskHeader = require('../constants').maskHeader;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../../utils/axios');
|
||||
const maskHeader = require('../constants').maskHeader;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../../utils/axios');
|
||||
const maskHeader = require('../constants').maskHeader;
|
||||
const assert = require('assert');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../../utils/axios');
|
||||
const maskHeader = require('../constants').maskHeader;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const config = require('../../config');
|
|||
const logger = require('../../utils/logger');
|
||||
const wait = require('../../utils/wait');
|
||||
const FormData = require('form-data');
|
||||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const maskHeader = require('./constants').maskHeader;
|
||||
|
||||
const pixivConfig = config.pixiv;
|
||||
|
|
@ -29,13 +29,18 @@ async function getToken() {
|
|||
data.append(key, element);
|
||||
}
|
||||
}
|
||||
const response = await axios.post('https://oauth.secure.pixiv.net/auth/token', data, {
|
||||
const response = await axios({
|
||||
method: 'post',
|
||||
url: 'https://oauth.secure.pixiv.net/auth/token',
|
||||
data: data,
|
||||
headers: {
|
||||
...maskHeader,
|
||||
...data.getHeaders(),
|
||||
},
|
||||
}).catch(function() {
|
||||
logger.error('Pixiv login fail.');
|
||||
});
|
||||
return response.data.response;
|
||||
return response && response.data && response.data.response;
|
||||
}
|
||||
|
||||
async function refreshToken(refresh_token) {
|
||||
|
|
@ -63,22 +68,24 @@ async function refreshToken(refresh_token) {
|
|||
|
||||
async function tokenLoop() {
|
||||
const res = await getToken();
|
||||
logger.info('Pixiv login success.');
|
||||
token = res.access_token;
|
||||
let refresh_token = res.refresh_token;
|
||||
let expires_in = res.expires_in * 0.9;
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
await wait(expires_in * 1000);
|
||||
try {
|
||||
const refresh_res = await refreshToken(refresh_token);
|
||||
logger.debug('Pixiv refresh token success.');
|
||||
token = refresh_res.access_token;
|
||||
refresh_token = refresh_res.refresh_token;
|
||||
expires_in = refresh_res.expires_in * 0.9;
|
||||
} catch (err) {
|
||||
expires_in = 30;
|
||||
logger.err(`Pixiv refresh token failed, retry in ${expires_in} seconds.`, err);
|
||||
if (res) {
|
||||
logger.info('Pixiv login success.');
|
||||
token = res.access_token;
|
||||
let refresh_token = res.refresh_token;
|
||||
let expires_in = res.expires_in * 0.9;
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
await wait(expires_in * 1000);
|
||||
try {
|
||||
const refresh_res = await refreshToken(refresh_token);
|
||||
logger.debug('Pixiv refresh token success.');
|
||||
token = refresh_res.access_token;
|
||||
refresh_token = refresh_res.refresh_token;
|
||||
expires_in = refresh_res.expires_in * 0.9;
|
||||
} catch (err) {
|
||||
expires_in = 30;
|
||||
logger.err(`Pixiv refresh token failed, retry in ${expires_in} seconds.`, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
const md5 = require('../../utils/md5');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
const weiboUtils = require('./utils');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
const weiboUtils = require('./utils');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
const weiboUtils = require('./utils');
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const cheerio = require('cheerio');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
// 参考:https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const config = require('../../config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const axios = require('axios');
|
||||
const axios = require('../../utils/axios');
|
||||
const qs = require('querystring');
|
||||
const config = require('../../config');
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
const logger = require('./logger');
|
||||
const config = require('../config');
|
||||
|
||||
const axiosRetry = require('axios-retry');
|
||||
const axios = require('axios');
|
||||
|
||||
axiosRetry(axios, {
|
||||
retries: config.requestRetry,
|
||||
retryCondition: () => true,
|
||||
retryDelay: (count, err) => {
|
||||
logger.error(`Request ${err.config.url} fail, retry attempt #${count}: ${err}`);
|
||||
return 100;
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = axios;
|
||||
|
|
@ -504,6 +504,12 @@ aws4@^1.6.0:
|
|||
version "1.7.0"
|
||||
resolved "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
|
||||
|
||||
axios-retry@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.0.tgz#00d911e989a8c082a0acf8b90668cfa12733d736"
|
||||
dependencies:
|
||||
is-retry-allowed "^1.1.0"
|
||||
|
||||
axios@0.18.0, axios@^0.18.0:
|
||||
version "0.18.0"
|
||||
resolved "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102"
|
||||
|
|
@ -3157,7 +3163,7 @@ is-resolvable@^1.0.0:
|
|||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
|
||||
|
||||
is-retry-allowed@^1.0.0:
|
||||
is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue