AutoJs6
AutoJs6 copied to clipboard
HTTP 设置请求超时无效
方式一: (function () { let request = http.request; http.request = function () { try { return request.apply(http, arguments); } catch (err) { console.error('HTTP Error:', err); return null; } } })(); http.okhttp.setTimeout(10000);
方式二: var response = http.get(url, { timeout: 10000, headers: { contentType: 'application/json' } });
上述两种方式设置请求的超时,都没有效果,请求会一直卡着。
我也遇到了这个问题,找了很久都不能解决,现在勉强用着另一个方法:
先设置res为空 然后用线程启动一个http请求,在线程里面令res=http请求 然后用Thread.join来设置超时
let res;
let t = threads.start(()=>{
res=http.post(...);
});
t.join(5000);
t.interrput();
我也遇到了这个问题,找了很久都不能解决,现在勉强用着另一个方法:
先设置res为空 然后用线程启动一个http请求,在线程里面令res=http请求 然后用Thread.join来设置超时
let res; let t = threads.start(()=>{ res=http.post(...); }); t.join(5000); t.interrput();
感谢,这段代码可以解决。 🤝👍
我尝试使用下述两个示例代码进行测试 (示例 A 和 示例 B, 其区别仅在于 timeout 参数值), 结果如预期, 即示例 A 正常返回用户名, 示例 B 超时并抛出 java.net.SocketTimeoutException
异常.
示例 A:
let url = 'https://api.github.com/users/supermonster003';
let response = http.get(url, {
timeout: 10000,
headers: { contentType: 'application/json' },
});
console.log(response.body.json().name);
示例 B:
let url = 'https://api.github.com/users/supermonster003';
let response = http.get(url, {
timeout: 100,
headers: { contentType: 'application/json' },
});
console.log(response.body.json().name);
可以尝试不加 timeout 参数检查是否会导致无限阻塞, 或尝试其他 URL 检查是否存在同样问题.
另 AutoJs6 中 http 模块的 timeout 参数功能内部实现, 就是使用的 http.__http__.setTimeout
方法, 所以本质上你提供的方式一与方式二是等价的.
Sent from my XQ-DQ72 using FastHub