#node.js #captcha
#node.js #captcha
Вопрос:
Я использую azcapture api, который принимает номер в качестве идентификатора только в конце параметров ‘path’ api выборки / запроса и работает, когда я ввожу идентификатор, например
Var options = {
'path':'url key 1234455
}
Когда вводится 1234455, как указано выше, это работает. Но поскольку это соответственно, я не могу заранее знать идентификатор, поэтому я передаю его из результата запроса, который был POST, и теперь я получаю, фактически я связал их без использования Promises:
Function secondCall(id)
Console.log (id)
Var options = { 'path': url key id
}
Это вышеописанное всегда завершается неудачей, даже если я анализирую id с помощью parseInt или Number () или если я анализирую или принудительно, то
id.toString()
поскольку ClientRequestArgs.path является строкой (ClientRequestArgs.path?: string), я полагаю, что он всегда преобразуется в строку.
Я вижу здесь двоение или есть фундаментальная проблема?
POSTMAN работает нормально, кстати, и приведенный ниже код экспортирован из POSTMAN, за исключением того, что в функции chainResolve первые 4 строки являются моим кодом преобразования.
Если я изменю эту строку и заменю resolvedID на предварительно сгенерированный идентификатор, это сработает: url: ‘http://azcaptcha.com/res.php?key=kowg1cjodmtlyiyqheuzjfzta4ki0vwnamp;action=getamp;id=335439890 ‘,
Но поскольку resolvedID преобразует строку (предварительно сгенерированный идентификатор) в int, это не сработает.
Полный код с опущенными ключами:
var request = require('request');
var fs = require('fs');
var http = require('follow-redirects').http;
var axios = require('axios');
var options = {
'method': 'POST',
'url': 'http://azcaptcha.com/in.php?key=keyamp;method=post',
'headers': {
},
formData: {
'file': {
'value': fs.createReadStream('C:/Users/jsonX/Documents/fiverr/captchatest.png'),
'options': {
'filename': 'C:/Users/jsonX/Documents/fiverr/captchatest.png',
'contentType': null
}
}
}
};
//let respondedID;
convertToInt = (x) => {
var converted=parseInt(x[1], 10);
return converted;
}
request(options, function (error, response) {
if (error) throw new Error(error);
var respondedID = response.body;
console.log('line 26 ' respondedID);
chainResolve(respondedID);
});
chainResolve = (id) => {
var sid = id.split('|');
var resolvedID=parseInt(sid[1], 10)
console.log(parseInt(sid[1], 10));
console.log('line 40 ' convertToInt(sid));
var config = {
method: 'get',
url: 'http://azcaptcha.com/res.php?key=keyamp;action=getamp;id=resolvedID',
headers: { }
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
}
Ответ №1:
Решаемая проблема! Оказывается, этот API не вернет вам никакого результата, если соответственно используется CAPTCHA_NOT_READY. Итак, решение состояло в том, чтобы установить тайм-аут и отправить это с обратным вызовом в моем блоке ответа на второй запрос:
axios(config)
.then(function (response) {
if (result === 'CAPCHA_NOT_READY'){
console.log('Captcha is being processed');
var startTime = setTimeout(function() {
waitR(id);
clearTimeout(startTime);
},5000);
} else {
console.log(result.split('|')[1]);
}
})
.catch(function (error) {
console.log(error);
});
waitR = (id) => {
console.log('The result is being processed ...');
chainResolve(id);
}