API для принятия записанного номера в качестве опции?

#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);
}