问题描述
我使用的azcapture api仅在获取/请求api的“路径”选项的“ path”末尾接受数字作为id,并且在我输入id时可以正常工作。
FROM ubuntu:18.04
RUN adduser --disabled-password --gecos "" newuser
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get -y install time && \
apt-get -y install gcc mono-mcs && \
apt-get install pmccabe && \
rm -rf /var/lib/apt/lists/*
像上面一样键入1234455时,它可以工作。但是由于这是resp,所以我无法事先知道id,因此我从POST的req结果中传递了它,现在我执行GET,实际上,我已经将它们链接在一起而没有使用Promises:
Var options = {
'path':'url+key+1234455
}
即使我使用parseInt或Number()解析ID,或者如果我随后解析或强制,以上操作也总是失败
Function secondCall(id)
Console.log (id)
Var options = { 'path': url+key+id
}
因为ClientRequestArgs.path是一个字符串(ClientRequestArgs.path ?: string),所以我相信它总是解析为字符串。
POSTMAN可以正常工作,并且我下面的代码是从POSTMAN导出的,除了chainResolve函数中的前四行是我的转换代码。
如果我更改此行并将替换的ID替换为预先生成的ID,它将起作用: 网址:“ http://azcaptcha.com/res.PHP?key=kowg1cjodmtlyiyqheuzjfzta4ki0vwn&action=get&id=335439890”,
但是作为resolveID,将转换后的字符串(预先生成的ID)转换为int不会起作用。
省略键的完整代码:
id.toString()
解决方法
解决了!事实证明,如果验证码为CAPTCHA_NOT_READY,则此API不会给您任何结果。因此解决方案是设置一个超时,并在第二个请求的响应块中使用回调将其推送:
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);
}