Dart/Flutter: 快速检查 404 链接列表
Dart/Flutter: Quickly check list of links for 404
我正在构建一个使用外部服务的应用程序,该服务向 PDF 文档提供 URL 列表 link。对于其中一些 URL 的资源不存在 - 404.
我尝试构建以下内容以循环遍历 URL 的列表并获取资源是否存在,但它运行缓慢 - 每个 link 大约 100 毫秒到 500 毫秒秒。
有人对如何快速判断资源是否存在有任何建议吗?
var client = http.Client();
for (Article article in articles) {
if (article.downloadUrl != null) {
Uri url = Uri.parse(article.downloadUrl!);
http.Response _response = await client.head(url);
if (_response.statusCode == 404) {
print('Bad - ${article.downloadUrl}');
} else {
print('Good - ${article.downloadUrl}');
}
}
}
加速它的一个简单方法是利用异步功能。这将允许它同时 运行 所有请求,而不是像您的代码显示的那样一次一个请求。
var client = http.Client();
List<Future> futures = [];
for (Article article in articles) {
if (article.downloadUrl != null) {
Uri url = Uri.parse(article.downloadUrl!);
futures.add(isValidLink(url));
}
}
await Futures.wait(futures);
Future<void> isValidLink(Uri url) async {
http.Response _response = await client.head(url);
if (_response.statusCode == 404) {
print('Bad - ${article.downloadUrl}');
} else {
print('Good - ${article.downloadUrl}');
}
}
我正在构建一个使用外部服务的应用程序,该服务向 PDF 文档提供 URL 列表 link。对于其中一些 URL 的资源不存在 - 404.
我尝试构建以下内容以循环遍历 URL 的列表并获取资源是否存在,但它运行缓慢 - 每个 link 大约 100 毫秒到 500 毫秒秒。
有人对如何快速判断资源是否存在有任何建议吗?
var client = http.Client();
for (Article article in articles) {
if (article.downloadUrl != null) {
Uri url = Uri.parse(article.downloadUrl!);
http.Response _response = await client.head(url);
if (_response.statusCode == 404) {
print('Bad - ${article.downloadUrl}');
} else {
print('Good - ${article.downloadUrl}');
}
}
}
加速它的一个简单方法是利用异步功能。这将允许它同时 运行 所有请求,而不是像您的代码显示的那样一次一个请求。
var client = http.Client();
List<Future> futures = [];
for (Article article in articles) {
if (article.downloadUrl != null) {
Uri url = Uri.parse(article.downloadUrl!);
futures.add(isValidLink(url));
}
}
await Futures.wait(futures);
Future<void> isValidLink(Uri url) async {
http.Response _response = await client.head(url);
if (_response.statusCode == 404) {
print('Bad - ${article.downloadUrl}');
} else {
print('Good - ${article.downloadUrl}');
}
}