Почему tor-request не обновляет ip в цикле

#javascript #node.js #web-scraping #tor

#javascript #node.js #очистка веб-страниц #tor

Вопрос:

У меня есть следующий код:

 var tr = require('tor-request');
tr.TorControlPort.password = '***'

tr.request('https://api.ipify.org', (err, resp, ip) => {
    console.log('initial ip: '   ip)
})

function torRequest() {
    tr.renewTorSession((err, msg) => {
        console.log(msg);
        tr.request('https://api.ipify.org', (err, resp, ip) => {
            console.log('ip: '   ip)
        })
    })
}

torRequest();

for ( let i = 0; i < 2; i  ) {
    torRequest();
}
  

И мой вывод:

 Tor session successfully renewed!!
Tor session successfully renewed!!
Tor session successfully renewed!!
ip: 46.165.245.154
ip: 46.165.245.154
ip: 46.165.245.154
initial ip: 176.10.107.180
  

Когда я вызываю torRequest более одного раза, все запросы возвращаются с одним и тем же ip. Возможно ли запустить его в цикле?

Комментарии:

1. Возможно, вам следует проверить err аргумент. У вас может возникнуть ошибка, например, если существует ограничение на то, сколько раз вы можете обновлять свой IP за заданный промежуток времени.

2. Я сделал, ошибок не было

3. Что msg содержит?

4. Я обновил сообщение

Ответ №1:

Вам необходимо явно обновить сеанс tor

 tr.newTorSession( (err) =>
{
    requestIP();
    return;
});
  

Также добавьте это

 tr.setTorAddress('localhost', 9050);
  

после

 tr.TorControlPort.password = '***'
  

newTorSessio :

 module.exports = {
// <snip>

  /**
   * Helper object to communicate with the tor ControlPort. Requires an enabled ControlPort on tor.
   */
  TorControlPort: {
    password: "", // default ControlPort password
    host: "localhost", // default address
    port: 9051, // default ControlPort
    
    /**
     * @param {Array.string} commands - signals that are sent to the ControlPort
     */
    send: function (commands, done(err, data))
  }
  
  /**
   * A set of predefined TorControlPort commands to request and verify tor for a new session (get a new ip to use).
   *
   * @param {function} done - the callback function to tell you when the process is done
   * @param {object} err - null if tor session renewed successfully
   */
  newTorSession: function ( done(err) ) // clears and renews the Tor session (i.e., you get a new IP)
  

}
  

вот и все.. это сработает .. в моем случае.. IP будет обновлен после 5-6 раз

Удачи,’.