活动介绍

From: "Saved by Internet Explorer 11" Subject: Trioptics Certificate Date: Sat, 14 Jun 2025 20:29:25 +0800 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01DBDD6B.05180120" X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7601.23573 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01DBDD6B.05180120 Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Content-Location: file://C:\Program Files\Trioptics GmbH\MTF-LAB 5\Certificates\Certificate.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">qtc++解析这种html

时间: 2025-07-25 22:30:11 浏览: 24
<think>我们被要求解析一个特定的HTML文件,该文件是一个多部分MIME消息的一部分。但是,用户提供的是邮件头信息和HTML内容片段。 用户要求:解析这种HTML(具体指从Trioptics Certificate导出的HTML文件),并提到“qtc++”,可能意味着使用Qt和C++来解析。 然而,问题描述不够清晰。我们假设用户想要从给定的HTML文件中提取某些信息,并且使用Qt和C++来实现。 观察提供的HTML部分: - 它包含一个多部分MIME消息的边界,但我们只关注其中的HTML部分。 - 用户提供了Content-Type: text/html的部分,并且有Content-Location指向本地文件。 由于我们无法看到完整的HTML内容,我们只能根据一般情况来回答。 通常,这样的证书HTML可能包含一些表格、文本或图像,我们需要从中提取数据。 使用Qt和C++解析HTML,我们可以使用Qt的QWebEngineView(用于渲染和与JavaScript交互)或者使用Qt的XML模块(如果HTML是XHTML)或使用QTextDocument(用于简单HTML)。但是,更常见的做法是使用Qt的QXmlStreamReader或第三方库如Gumbo-parser进行解析。不过,Qt本身并没有提供完整的HTML解析器,因为HTML不是严格的XML。 在Qt中,我们可以使用QTextDocument(它可以处理一些简单的HTML标签)来提取纯文本,但如果需要结构化数据(如表格),则需要更强大的解析器。 另一种选择是使用QWebEnginePage来加载HTML,然后通过JavaScript提取数据,但这种方法比较重,因为它需要启动一个完整的浏览器引擎。 考虑到性能,如果HTML结构简单,我们可以使用正则表达式,但通常不推荐。如果结构复杂,推荐使用专门的HTML解析库。 这里,我们将使用Qt提供的QTextDocument来提取文本内容(假设我们只需要文本,而不需要复杂的结构)。如果HTML中有表格等复杂结构,这种方法可能不够。 步骤: 1. 读取HTML文件内容。 2. 将内容加载到QTextDocument中。 3. 使用QTextDocument的toPlainText()方法提取纯文本。 但是,如果我们需要提取特定的数据(比如表格中的特定行),那么我们需要更精确的方法。我们可以使用QTextDocument的遍历API,但比较繁琐。 另一种方法是使用Qt的QDomDocument,但要求HTML是格式良好的XML(XHTML),而通常的HTML不一定满足。 因此,我们可能需要使用第三方库。不过,由于问题中指定了“qtc++”,我们假设用户希望使用Qt。在Qt5.15及以后,我们可以使用Qt WebEngine和WebChannel来执行JavaScript并提取数据,但这对于简单的数据提取来说过于复杂。 这里,我们假设HTML结构相对简单,并且我们只需要提取证书中的一些关键信息(如证书编号、日期等),这些信息可能出现在特定的标签内。 我们采用以下方法: 使用QRegularExpression来匹配特定的模式(例如,通过标签名和内容)来提取信息。但请注意,正则表达式解析HTML通常不可靠,如果HTML结构变化容易出错。但对于已知格式的简单提取,可以接受。 由于我们没有完整的HTML,我们只能给出一个示例框架。 示例:假设证书HTML中有一个表格,其中包含“Certificate Number”和对应的值。 我们可以这样写: ```cpp #include <QFile> #include <QString> #include <QRegularExpression> #include <QDebug> int main() { QFile file("Certificate.html"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Failed to open file"; return 1; } QString htmlContent = file.readAll(); file.close(); // 假设我们要提取证书编号,假设它在表格中,例如:<td>Certificate Number</td><td>12345</td> QRegularExpression re("<td>\\s*Certificate Number\\s*</td>\\s*<td>(.*?)</td>", QRegularExpression::CaseInsensitiveOption); QRegularExpressionMatch match = re.match(htmlContent); if (match.hasMatch()) { QString certNumber = match.captured(1); qDebug() << "Certificate Number:" << certNumber; } else { qDebug() << "Certificate Number not found"; } // 类似地,可以提取其他信息 return 0; } ``` 但是,这种方法依赖于HTML的具体结构。如果结构有变,正则表达式可能失效。 另一种更健壮的方法是使用QTextDocument遍历文档结构,但代码更复杂。 由于我们不知道具体的HTML结构,这里只能提供一种思路。 如果用户需要更健壮的解析,建议使用专门的HTML解析库(如Gumbo-parser)与Qt结合。我们可以将Gumbo-parser集成到Qt项目中,然后遍历解析树来提取信息。 鉴于问题描述有限,我们将提供使用正则表达式的示例,并提醒用户其局限性。 如果用户需要,我们可以提供一个使用Gumbo-parser的示例,但需要用户自行下载和集成该库。 因此,我们提供两种方案: 方案1:使用正则表达式(简单,但不健壮) 方案2:使用Gumbo-parser(复杂,但健壮) 由于用户没有明确要求,我们先给出方案1的代码示例(如上),然后给出方案2的简要说明。 方案2的简要步骤: 1. 下载Gumbo-parser源码(https://github.com/google/gumbo-parser),并集成到Qt项目中。 2. 使用Gumbo-parser解析HTML,然后遍历节点树查找所需数据。 示例代码(使用Gumbo-parser): ```cpp #include <gumbo.h> #include <QFile> #include <QString> #include <QDebug> void search_for_cert_number(GumboNode* node) { if (node->type != GUMBO_NODE_ELEMENT) { return; } // 假设我们知道证书编号在一个表格行中,并且前面有一个单元格写着"Certificate Number" // 这里只是一个示例,需要根据实际HTML结构编写 if (node->v.element.tag == GUMBO_TAG_TR) { GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { GumboNode* child = static_cast<GumboNode*>(children->data[i]); if (child->type == GUMBO_NODE_ELEMENT && child->v.element.tag == GUMBO_TAG_TD) { if (child->v.element.children.length > 0) { GumboNode* textNode = static_cast<GumboNode*>(child->v.element.children.data[0]); if (textNode->type == GUMBO_NODE_TEXT && QString(textNode->v.text.text).contains("Certificate Number")) { // 下一个兄弟节点应该是包含编号的td if (i+1 < children->length) { GumboNode* nextTd = static_cast<GumboNode*>(children->data[i+1]); if (nextTd->type == GUMBO_NODE_ELEMENT && nextTd->v.element.tag == GUMBO_TAG_TD) { if (nextTd->v.element.children.length > 0) { GumboNode* numNode = static_cast<GumboNode*>(nextTd->v.element.children.data[0]); if (numNode->type == GUMBO_NODE_TEXT) { qDebug() << "Certificate Number:" << numNode->v.text.text; } } } } } } } } } // 递归遍历子节点 GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { search_for_cert_number(static_cast<GumboNode*>(children->data[i])); } } int main() { QFile file("Certificate.html"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Failed to open file"; return 1; } QByteArray htmlData = file.readAll(); file.close(); GumboOutput* output = gumbo_parse(htmlData.constData()); search_for_cert_number(output->root); gumbo_destroy_output(&kGumboDefaultOptions, output); return 0; } ``` 注意:上述Gumbo示例代码是示意性的,实际HTML结构可能不同,需要调整。 由于用户没有提供具体的HTML内容,我们无法给出精确的解析代码。 因此,我们建议用户先查看HTML结构,然后选择合适的方法。 最后,我们按照要求提出相关问题。 注意:用户要求最后提出相关问题,格式为: §§相关问题§§: 1. ··· 2. ··· 3. ··· 4. ··· 我们提出以下问题:</think>### 使用 Qt/C++ 解析 HTML 邮件内容 您提供的 HTML 邮件结构包含 MIME 多部分格式和 HTML 内容。以下是使用 Qt/C++ 解析此类邮件的完整方案: #### 解决方案步骤: 1. **解析 MIME 结构**:处理多部分边界 2. **提取 HTML 内容**:定位并解码 HTML 部分 3. **解析 HTML**:提取证书信息 4. **处理编码**:转换 Windows-1252 编码 #### 完整代码实现 ```cpp #include <QCoreApplication> #include <QFile> #include <QTextStream> #include <QRegularExpression> #include <QTextCodec> #include <QDebug> // 解析 MIME 多部分邮件 void parseMimeEmail(const QString& filePath) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "无法打开文件:" << filePath; return; } QTextStream in(&file); QString content = in.readAll(); file.close(); // 1. 提取 MIME 边界 QRegularExpression boundaryRegex("boundary=\"([^\"]+)\""); QRegularExpressionMatch boundaryMatch = boundaryRegex.match(content); if (!boundaryMatch.hasMatch()) { qWarning() << "未找到 MIME 边界"; return; } QString boundary = "--" + boundaryMatch.captured(1); qDebug() << "找到边界:" << boundary; // 2. 分割 MIME 部分 QStringList mimeParts = content.split(boundary); QString htmlContent; // 3. 查找 HTML 部分 for (const QString& part : mimeParts) { if (part.contains("Content-Type: text/html") && part.contains("Content-Location: file://")) { // 提取 HTML 内容 (跳过头部) int startIndex = part.indexOf("<!DOCTYPE"); if (startIndex == -1) startIndex = part.indexOf("<html"); if (startIndex != -1) { htmlContent = part.mid(startIndex); break; } } } if (htmlContent.isEmpty()) { qWarning() << "未找到 HTML 内容"; return; } // 4. 转换编码 (Windows-1252 转 UTF-8) QTextCodec* codec = QTextCodec::codecForName("Windows-1252"); if (!codec) codec = QTextCodec::codecForLocale(); QString decodedHtml = codec->toUnicode(htmlContent.toLatin1()); // 5. 解析 HTML 内容 QRegularExpression certInfoRegex( "<tr>\\s*<td[^>]*>([^<]+)</td>\\s*<td[^>]*>([^<]+)</td>\\s*</tr>", QRegularExpression::CaseInsensitiveOption | QRegularExpression::DotMatchesEverythingOption ); QRegularExpressionMatchIterator it = certInfoRegex.globalMatch(decodedHtml); while (it.hasNext()) { QRegularExpressionMatch match = it.next(); QString key = match.captured(1).trimmed(); QString value = match.captured(2).trimmed(); qDebug().noquote() << key << ":" << value; } // 6. 提取证书特定信息 (示例) QRegularExpression certIdRegex("Certificate ID:</td>\\s*<td[^>]*>(\\d+)</td>"); QRegularExpressionMatch certIdMatch = certIdRegex.match(decodedHtml); if (certIdMatch.hasMatch()) { qDebug() << "\n证书ID:" << certIdMatch.captured(1); } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); parseMimeEmail("C:/Path/To/Certificate.html"); return a.exec(); } ``` #### 代码解释: 1. **MIME 边界处理**: - 使用正则表达式提取 `boundary` 参数 - 根据边界分割邮件各部分 2. **HTML 定位**: - 查找包含 `Content-Type: text/html` 的部分 - 跳过 MIME 头部直接提取 HTML 内容 3. **编码转换**: - 将 Windows-1252 编码转换为 UTF-8 - 使用 Qt 的 `QTextCodec` 处理特殊字符 4. **HTML 解析**: - 使用正则表达式匹配表格行 (`<tr><td>...</td><td>...</td></tr>`) - 提取键值对形式的证书数据 - 示例匹配特定字段如 "Certificate ID" 5. **错误处理**: - 文件打开失败检测 - MIME 边界缺失处理 - HTML 内容缺失处理 #### 输出示例: ``` 仪器序列号 : ABC-12345 校准日期 : 2025-06-14 证书ID : CERT-789XYZ 有效期 : 2026-06-13 ... ``` #### 处理注意事项: 1. **HTML 结构变化**:实际解析需根据证书 HTML 结构调整正则表达式 2. **编码问题**:确保正确处理 Windows-1252 特殊字符 3. **性能优化**:大文件建议使用流式解析 4. **错误恢复**:添加更健壮的异常处理机制
阅读全文

相关推荐

releaseRuntimeClasspath - Resolved configuration for runtime for variant: release +--- androidx.appcompat:appcompat:1.6.1 | +--- androidx.activity:activity:1.6.0 -> 1.8.0 | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.core:core:1.8.0 -> 1.9.0 | | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 | | | +--- androidx.annotation:annotation-experimental:1.3.0 | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.8.22 | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 | | | | \--- org.jetbrains:annotations:13.0 | | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | | | +--- androidx.concurrent:concurrent-futures:1.0.0 -> 1.1.0 | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | \--- com.google.guava:listenablefuture:1.0 | | | +--- androidx.lifecycle:lifecycle-runtime:2.3.1 -> 2.6.1 | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | +--- androidx.arch.core:core-common:2.2.0 | | | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | +--- androidx.arch.core:core-runtime:2.2.0 | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | | \--- androidx.arch.core:core-common:2.2.0 (*) | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4 | | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4 | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.4 | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 (c) | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4 (c) | | | | | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4 (c) | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21 -> 1.8.22 | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 (*) | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22 | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 (*) | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21 -> 1.8.22 | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.4 (*) | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21 -> 1.8.22 (*) | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.6.1 (c) | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 (c) | | | | | +--- androidx.lifecycle:lifecycle-process:2.6.1 (c) | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (c) | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 (c) | | | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 (c) | | | | +--- androidx.profileinstaller:profileinstaller:1.3.0 | | | | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 | | | | | +--- androidx.concurrent:concurrent-futures:1.1.0 (*) | | | | | +--- androidx.startup:startup-runtime:1.1.1 | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | | | \--- androidx.tracing:tracing:1.0.0 | | | | | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | | \--- com.google.guava:listenablefuture:1.0 | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-process:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 (c) | | | | \--- androidx.lifecycle:lifecycle-livedata:2.6.1 (c) | | | +--- androidx.versionedparcelable:versionedparcelable:1.1.1 | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | | | \--- androidx.core:core-ktx:1.9.0 (c) | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (*) | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-process:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 (c) | | | \--- androidx.lifecycle:lifecycle-livedata:2.6.1 (c) | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | | | +--- androidx.core:core-ktx:1.2.0 -> 1.9.0 | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | +--- androidx.core:core:1.9.0 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.8.22 (*) | | | | \--- androidx.core:core:1.9.0 (c) | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 | | | | +--- androidx.arch.core:core-common:2.1.0 -> 2.2.0 (*) | | | | +--- androidx.arch.core:core-runtime:2.1.0 -> 2.2.0 (*) | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-livedata:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-process:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 (c) | | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 (*) | | | +--- androidx.savedstate:savedstate:1.2.1 | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | | +--- androidx.arch.core:core-common:2.1.0 -> 2.2.0 (*) | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (*) | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 (*) | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-process:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 (c) | | | \--- androidx.lifecycle:lifecycle-livedata:2.6.1 (c) | | +--- androidx.profileinstaller:profileinstaller:1.3.0 (*) | | +--- androidx.savedstate:savedstate:1.2.1 (*) | | +--- androidx.tracing:tracing:1.0.0 (*) | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 (*) | +--- androidx.annotation:annotation:1.3.0 | +--- androidx.appcompat:appcompat-resources:1.6.1 | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | | +--- androidx.core:core:1.6.0 -> 1.9.0 (*) | | +--- androidx.vectordrawable:vectordrawable:1.1.0 | | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | | +--- androidx.core:core:1.1.0 -> 1.9.0 (*) | | | \--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.vectordrawable:vectordrawable-animated:1.1.0 | | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) | | | +--- androidx.interpolator:interpolator:1.0.0 | | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | | | \--- androidx.collection:collection:1.1.0 (*) | | \--- androidx.appcompat:appcompat:1.6.1 (c) | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.core:core:1.9.0 (*) | +--- androidx.core:core-ktx:1.8.0 -> 1.9.0 (*) | +--- androidx.cursoradapter:cursoradapter:1.0.0 | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1 | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.core:core:1.2.0 -> 1.9.0 (*) | | \--- androidx.customview:customview:1.1.0 | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.core:core:1.3.0 -> 1.9.0 (*) | | \--- androidx.collection:collection:1.1.0 (*) | +--- androidx.emoji2:emoji2:1.2.0 | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 | | +--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.core:core:1.3.0 -> 1.9.0 (*) | | +--- androidx.lifecycle:lifecycle-process:2.4.1 -> 2.6.1 | | | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (*) | | | +--- androidx.startup:startup-runtime:1.1.1 (*) | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-livedata:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (c) | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 (c) | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 (c) | | \--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*) | +--- androidx.emoji2:emoji2-views-helper:1.2.0 | | +--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.core:core:1.3.0 -> 1.9.0 (*) | | \--- androidx.emoji2:emoji2:1.2.0 (*) | +--- androidx.fragment:fragment:1.3.6 | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.core:core:1.2.0 -> 1.9.0 (*) | | +--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.viewpager:viewpager:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | | | +--- androidx.core:core:1.0.0 -> 1.9.0 (*) | | | \--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) | | +--- androidx.loader:loader:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | | | +--- androidx.core:core:1.0.0 -> 1.9.0 (*) | | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.6.1 | | | | +--- androidx.arch.core:core-common:2.1.0 -> 2.2.0 (*) | | | | +--- androidx.arch.core:core-runtime:2.1.0 -> 2.2.0 (*) | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.8.22 (*) | | | | +--- androidx.lifecycle:lifecycle-common:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-process:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-runtime:2.6.1 (c) | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 (c) | | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 (c) | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.6.1 (*) | | +--- androidx.activity:activity:1.2.4 -> 1.8.0 (*) | | +--- androidx.lifecycle:lifecycle-livedata-core:2.3.1 -> 2.6.1 (*) | | +--- androidx.lifecycle:lifecycle-viewmodel:2.3.1 -> 2.6.1 (*) | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 -> 2.6.1 (*) | | +--- androidx.savedstate:savedstate:1.1.0 -> 1.2.1 (*) | | \--- androidx.annotation:annotation-experimental:1.0.0 -> 1.3.0 (*) | +--- androidx.lifecycle:lifecycle-runtime:2.5.1 -> 2.6.1 (*) | +--- androidx.lifecycle:lifecycle-viewmodel:2.5.1 -> 2.6.1 (*) | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 | | \--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | +--- androidx.savedstate:savedstate:1.2.0 -> 1.2.1 (*) | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.8.22 (*) | \--- androidx.appcompat:appcompat-resources:1.6.1 (c) +--- com.google.android.material:material:1.10.0 -> 1.11.0 | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22 | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 (c) | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22 (c) | | +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 (c) | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22 (c) | +--- com.google.errorprone:error_prone_annotations:2.15.0 | +--- androidx.activity:activity:1.8.0 (*) | +--- androidx.annotation:annotation:1.2.0 -> 1.3.0 | +--- androidx.appcompat:appcompat:1.6.1 (*) | +--- androidx.cardview:cardview:1.0.0 | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | +--- androidx.coordinatorlayout:coordinatorlayout:1.1.0 | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.core:core:1.1.0 -> 1.9.0 (*) | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.constraintlayout:constraintlayout:2.0.1 -> 2.1.4 | | +--- androidx.appcompat:appcompat:1.2.0 -> 1.6.1 (*) | | +--- androidx.core:core:1.3.2 -> 1.9.0 (*) | | \--- androidx.constraintlayout:constraintlayout-core:1.0.4 | +--- androidx.core:core:1.6.0 -> 1.9.0 (*) | +--- androidx.drawerlayout:drawerlayout:1.1.1 (*) | +--- androidx.dynamicanimation:dynamicanimation:1.0.0 | | +--- androidx.core:core:1.0.0 -> 1.9.0 (*) | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | | +--- androidx.core:core:1.0.0 -> 1.9.0 (*) | | +--- androidx.documentfile:documentfile:1.0.0 | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | | +--- androidx.loader:loader:1.0.0 (*) | | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 | | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | | \--- androidx.print:print:1.0.0 | | \--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | +--- androidx.annotation:annotation-experimental:1.0.0 -> 1.3.0 (*) | +--- androidx.fragment:fragment:1.2.5 -> 1.3.6 (*) | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.6.1 (*) | +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.1.0 | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.core:core:1.1.0 -> 1.9.0 (*) | | +--- androidx.customview:customview:1.0.0 -> 1.1.0 (*) | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.resourceinspection:resourceinspection-annotation:1.0.1 (*) | +--- androidx.transition:transition:1.2.0 | | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | | +--- androidx.core:core:1.0.1 -> 1.9.0 (*) | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) | \--- androidx.viewpager2:viewpager2:1.0.0 | +--- androidx.annotation:annotation:1.1.0 -> 1.3.0 | +--- androidx.fragment:fragment:1.1.0 -> 1.3.6 (*) | +--- androidx.recyclerview:recyclerview:1.1.0 (*) | +--- androidx.core:core:1.1.0 -> 1.9.0 (*) | \--- androidx.collection:collection:1.1.0 (*) +--- com.google.android.material:material:1.11.0 (*) +--- androidx.activity:activity:1.8.0 (*) \--- androidx.constraintlayout:constraintlayout:2.1.4 (*) (c) - A dependency constraint, not a dependency. The dependency affected by the constraint occurs elsewhere in the tree. (*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation. A web-based, searchable dependency report is available by adding the --scan option. BUILD SUCCESSFUL in 20s 1 actionable task: 1 executed

Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-60-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro System information as of Wed May 28 02:10:15 UTC 2025 System load: 0.0 Processes: 176 Usage of /: 1.9% of 386.42GB Users logged in: 1 Memory usage: 1% IPv4 address for eth0: 185.199.52.219 Swap usage: 0% IPv6 address for eth0: 2a02:4780:12:27e7::1 Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. 14 additional security updates can be applied with ESM Apps. Learn more about enabling ESM Apps service at https://ubuntu.com/esm Last login: Wed May 28 02:08:30 2025 from 169.254.0.1 root@srv771551:~# ^C root@srv771551:~# which tabby # 应输出安装路径 tabby --version Command 'tabby' not found, did you mean: command 'ktabby' from deb kgames (2.3-1) Try: apt install <deb name> root@srv771551:~# sudo snap install tabby error: snap "tabby" not found root@srv771551:~# wget https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.deb --2025-05-28 02:14:56-- https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.deb Resolving github.com (github.com)... 20.207.73.82 Connecting to github.com (github.com)|20.207.73.82|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/49d65aef-dda0-40ec-8f6c-bb2f59b7b2ef?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021457Z&X-Amz-Expires=300&X-Amz-Signature=16929604a9e7523d5674ba06f7675fd4c04bf70e8b3d21ddf89c85c14d2a1c45&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.deb&response-content-type=application%2Foctet-stream [following] --2025-05-28 02:14:57-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/49d65aef-dda0-40ec-8f6c-bb2f59b7b2ef?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021457Z&X-Amz-Expires=300&X-Amz-Signature=16929604a9e7523d5674ba06f7675fd4c04bf70e8b3d21ddf89c85c14d2a1c45&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.deb&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.110.133, 185.199.109.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 90647356 (86M) [application/octet-stream] Saving to: 'tabby-1.0.209-linux-x64.deb' tabby-1.0.209-linux-x64.deb 100%[=================================================================================================================================>] 86.45M 6.40MB/s in 13s 2025-05-28 02:15:11 (6.84 MB/s) - 'tabby-1.0.209-linux-x64.deb' saved [90647356/90647356] root@srv771551:~# sudo apt-get install gdebi Reading package lists... Done Building dependency tree... Done Reading state information... Done gdebi is already the newest version (0.9.5.7+nmu7). gdebi set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@srv771551:~# sudo gdebi tabby-*.deb /usr/bin/gdebi:113: SyntaxWarning: invalid escape sequence '\S' c = findall("[[(](\S+)/\S+[])]", msg)[0].lower() Reading package lists... Done Building dependency tree... Done Reading state information... Done Reading state information... Done This package is uninstallable Dependency is not satisfiable: gconf2 root@srv771551:~# sudo gdebi tabby-*.deb /usr/bin/gdebi:113: SyntaxWarning: invalid escape sequence '\S' c = findall("[[(](\S+)/\S+[])]", msg)[0].lower() Reading package lists... Done Building dependency tree... Done Reading state information... Done Reading state information... Done This package is uninstallable Dependency is not satisfiable: gconf2 root@srv771551:~# wget https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage --2025-05-28 02:16:02-- https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage Resolving github.com (github.com)... 20.207.73.82 Connecting to github.com (github.com)|20.207.73.82|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream [following] --2025-05-28 02:16:02-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.111.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.109.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 134111099 (128M) [application/octet-stream] Saving to: 'tabby-1.0.209-linux-x64.AppImage' tabby-1.0.209-linux-x64.AppImage 100%[=================================================================================================================================>] 127.90M 7.66MB/s in 19s 2025-05-28 02:16:22 (6.67 MB/s) - 'tabby-1.0.209-linux-x64.AppImage' saved [134111099/134111099] root@srv771551:~# wget https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage --2025-05-28 02:16:26-- https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage Resolving github.com (github.com)... 20.207.73.82 Connecting to github.com (github.com)|20.207.73.82|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream [following] --2025-05-28 02:16:26-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.109.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 134111099 (128M) [application/octet-stream] Saving to: 'tabby-1.0.209-linux-x64.AppImage.1' tabby-1.0.209-linux-x64.AppImage.1 100%[=================================================================================================================================>] 127.90M 84.0MB/s in 1.5s 2025-05-28 02:16:29 (84.0 MB/s) - 'tabby-1.0.209-linux-x64.AppImage.1' saved [134111099/134111099] root@srv771551:~# chmod +x *.AppImage root@srv771551:~# which tabby # 应输出安装路径 tabby --version Command 'tabby' not found, did you mean: command 'ktabby' from deb kgames (2.3-1) Try: apt install <deb name> root@srv771551:~# ^C root@srv771551:~# ^C root@srv771551:~# wget https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage --2025-05-28 02:18:08-- https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage Resolving github.com (github.com)... 20.207.73.82 Connecting to github.com (github.com)|20.207.73.82|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream [following] --2025-05-28 02:18:08-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.111.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 134111099 (128M) [application/octet-stream] Saving to: 'tabby-1.0.209-linux-x64.AppImage.2' tabby-1.0.209-linux-x64.AppImage.2 100%[=================================================================================================================================>] 127.90M 49.2MB/s in 2.6s 2025-05-28 02:18:12 (49.2 MB/s) - 'tabby-1.0.209-linux-x64.AppImage.2' saved [134111099/134111099] root@srv771551:~# sudo apt install libfuse2 # AppImage运行必需的基础依赖[^2] Reading package lists... Done Building dependency tree... Done Reading state information... Done Note, selecting 'libfuse2t64' instead of 'libfuse2' libfuse2t64 is already the newest version (2.9.9-8.1build1). libfuse2t64 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@srv771551:~# chmod +x tabby-*.AppImage root@srv771551:~# ./tabby-*.AppImage [0528/021833.570631:FATAL:electron_main_delegate.cc(294)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. Trace/breakpoint trap (core dumped) root@srv771551:~# # 将Tabby添加到应用程序菜单 sudo mkdir -p /usr/local/bin sudo mv tabby-*.AppImage /usr/local/bin/tabby root@srv771551:~# sudo apt install fuse3 Reading package lists... Done Building dependency tree... Done Reading state information... Done fuse3 is already the newest version (3.14.0-5build1). fuse3 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@srv771551:~# sha256sum tabby-*.AppImage | grep $(curl -sL 发布页 | grep sha256) sha256sum: 'tabby-*.AppImage': No such file or directory Usage: grep [OPTION]... PATTERNS [FILE]... Try 'grep --help' for more information. root@srv771551:~# ^C root@srv771551:~# ^C root@srv771551:~#

日志:[TASK] ====== CONTINUOUS DOWNLOAD STARTED ====== [INFO] Devices: 8 | Save path: F:/GKD/ [PROCESS] Device: GK2025040001 | Date: 2025-07-01 [DEBUG] Time Parameters: Original Local: 2025-07-01T00:00 - 2025-07-01T23:59:59 Converted Server: 2025-07-01 00:00:00 - 2025-07-01 23:59:59 Raw Time: 2025-07-01 00:00:00 & 2025-07-01 23:59:59 [DEBUG] Final request URL: http://nyzbwlw.com/situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%2000:00:00&endTime=2025-07-01%2023:59:59&size=1000&t=1754026969103 2025-08-01 13:42:49 [Thread-1] DEBUG o.s.web.client.RestTemplate - HTTP GET http://nyzbwlw.com/situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026969103 2025-08-01 13:42:49 [Thread-1] DEBUG o.s.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*] 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.c.protocol.RequestAddCookies - CookieSpec selected: default 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.c.protocol.RequestAuthCache - Auth cache not set in the context 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection request: [route: {}->http://nyzbwlw.com:80][total available: 0; route allocated: 0 of 2; total allocated: 0 of 20] 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection leased: [id: 0][route: {}->http://nyzbwlw.com:80][total available: 0; route allocated: 1 of 2; total allocated: 1 of 20] 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Opening connection {}->http://nyzbwlw.com:80 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.DefaultHttpClientConnectionOperator - Connecting to nyzbwlw.com/47.92.156.54:80 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.DefaultHttpClientConnectionOperator - Connection established 192.168.2.4:62064<->47.92.156.54:80 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 15000 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Executing request GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026969103 HTTP/1.1 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Target auth state: UNCHALLENGED 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Proxy auth state: UNCHALLENGED 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026969103 HTTP/1.1 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept: application/json, text/plain, */* 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Connection: keep-alive 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Referer: http://nyzbwlw.com/situation/ 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Origin: http://nyzbwlw.com 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Dest: empty 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Mode: cors 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Site: same-origin 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Host: nyzbwlw.com 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept-Encoding: gzip,deflate 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026969103 HTTP/1.1[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept: application/json, text/plain, */*[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Connection: keep-alive[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Referer: http://nyzbwlw.com/situation/[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Origin: http://nyzbwlw.com[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Dest: empty[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Mode: cors[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Site: same-origin[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Host: nyzbwlw.com[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept-Encoding: gzip,deflate[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "HTTP/1.1 200 [\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Server: nginx/1.20.2[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Date: Fri, 01 Aug 2025 05:42:49 GMT[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Content-Type: application/json;charset=UTF-8[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Transfer-Encoding: chunked[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Connection: keep-alive[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Credentials: true[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Origin: *[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Vary: Origin[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Expose-Headers: Set-Cookie[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Set-Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A; Path=/situation; HttpOnly[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "41[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "{"msg":"[0xe6][0x93][0x8d][0xe4][0xbd][0x9c][0xe6][0x88][0x90][0xe5][0x8a][0x9f][0xef][0xbc][0x81]","code":100,"data":{"count":0,"list":[]}}[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "0[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[\r][\n]" 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << HTTP/1.1 200 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Server: nginx/1.20.2 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Date: Fri, 01 Aug 2025 05:42:49 GMT 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Content-Type: application/json;charset=UTF-8 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Transfer-Encoding: chunked 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Connection: keep-alive 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Credentials: true 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Origin: * 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Vary: Origin 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Expose-Headers: Set-Cookie 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS 2025-08-01 13:42:49 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Set-Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A; Path=/situation; HttpOnly 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Connection can be kept alive indefinitely 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.c.p.ResponseProcessCookies - Cookie accepted [JSESSIONID="852AF1576F877DE9C07BC6B516B6220A", version:0, domain:nyzbwlw.com, path:/situation, expiry:null] 2025-08-01 13:42:49 [Thread-1] DEBUG o.s.web.client.RestTemplate - Response 200 OK 2025-08-01 13:42:49 [Thread-1] DEBUG o.s.web.client.RestTemplate - Reading to [java.lang.String] as "application/json;charset=UTF-8" 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection [id: 0][route: {}->http://nyzbwlw.com:80] can be kept alive indefinitely 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 0 2025-08-01 13:42:49 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {}->http://nyzbwlw.com:80][total available: 1; route allocated: 1 of 2; total allocated: 1 of 20] [COOKIE] Saved session cookie: JSESSIONID [DEBUG] Response Status: 200 OK [DEBUG] Raw API response snippet: {"msg":"操作成功!","code":100,"data":{"count":0,"list":[]}} [DEBUG] Parsed API response code: 100 | message: 操作成功! [DEBUG] Found 0 valid image entries [RETRY] Retrying in 2000 ms (attempt 2/3) [DEBUG] Time Parameters: Original Local: 2025-07-01T00:00 - 2025-07-01T23:59:59 Converted Server: 2025-07-01 00:00:00 - 2025-07-01 23:59:59 Raw Time: 2025-07-01 00:00:00 & 2025-07-01 23:59:59 [DEBUG] Final request URL: http://nyzbwlw.com/situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%2000:00:00&endTime=2025-07-01%2023:59:59&size=1000&t=1754026971579 [DEBUG] Sending cookies: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A 2025-08-01 13:42:51 [Thread-1] DEBUG o.s.web.client.RestTemplate - HTTP GET http://nyzbwlw.com/situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026971579 2025-08-01 13:42:51 [Thread-1] DEBUG o.s.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*] 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.c.protocol.RequestAddCookies - CookieSpec selected: default 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.c.protocol.RequestAddCookies - Cookie [version: 0][name: JSESSIONID][value: 852AF1576F877DE9C07BC6B516B6220A][domain: nyzbwlw.com][path: /situation][expiry: null] match [nyzbwlw.com:80/situation/http/device/bug/getBugData] 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.c.protocol.RequestAuthCache - Auth cache not set in the context 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection request: [route: {}->http://nyzbwlw.com:80][total available: 1; route allocated: 1 of 2; total allocated: 1 of 20] 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[read] I/O error: Read timed out" 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection leased: [id: 0][route: {}->http://nyzbwlw.com:80][total available: 0; route allocated: 1 of 2; total allocated: 1 of 20] 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 0 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 15000 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Executing request GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026971579 HTTP/1.1 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Target auth state: UNCHALLENGED 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Proxy auth state: UNCHALLENGED 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026971579 HTTP/1.1 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept: application/json, text/plain, */* 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Connection: keep-alive 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Referer: http://nyzbwlw.com/situation/ 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Origin: http://nyzbwlw.com 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Dest: empty 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Mode: cors 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Site: same-origin 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Host: nyzbwlw.com 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept-Encoding: gzip,deflate 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026971579 HTTP/1.1[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept: application/json, text/plain, */*[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Connection: keep-alive[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Referer: http://nyzbwlw.com/situation/[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Origin: http://nyzbwlw.com[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Dest: empty[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Mode: cors[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Site: same-origin[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Host: nyzbwlw.com[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept-Encoding: gzip,deflate[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "HTTP/1.1 200 [\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Server: nginx/1.20.2[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Date: Fri, 01 Aug 2025 05:42:51 GMT[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Content-Type: application/json;charset=UTF-8[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Transfer-Encoding: chunked[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Connection: keep-alive[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Credentials: true[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Origin: *[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Vary: Origin[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Expose-Headers: Set-Cookie[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "41[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "{"msg":"[0xe6][0x93][0x8d][0xe4][0xbd][0x9c][0xe6][0x88][0x90][0xe5][0x8a][0x9f][0xef][0xbc][0x81]","code":100,"data":{"count":0,"list":[]}}[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "0[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[\r][\n]" 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << HTTP/1.1 200 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Server: nginx/1.20.2 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Date: Fri, 01 Aug 2025 05:42:51 GMT 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Content-Type: application/json;charset=UTF-8 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Transfer-Encoding: chunked 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Connection: keep-alive 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Credentials: true 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Origin: * 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Vary: Origin 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Expose-Headers: Set-Cookie 2025-08-01 13:42:51 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Connection can be kept alive indefinitely 2025-08-01 13:42:51 [Thread-1] DEBUG o.s.web.client.RestTemplate - Response 200 OK 2025-08-01 13:42:51 [Thread-1] DEBUG o.s.web.client.RestTemplate - Reading to [java.lang.String] as "application/json;charset=UTF-8" 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection [id: 0][route: {}->http://nyzbwlw.com:80] can be kept alive indefinitely 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 0 2025-08-01 13:42:51 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {}->http://nyzbwlw.com:80][total available: 1; route allocated: 1 of 2; total allocated: 1 of 20] [DEBUG] Response Status: 200 OK [DEBUG] Raw API response snippet: {"msg":"操作成功!","code":100,"data":{"count":0,"list":[]}} [DEBUG] Parsed API response code: 100 | message: 操作成功! [DEBUG] Found 0 valid image entries [RETRY] Retrying in 4000 ms (attempt 3/3) [DEBUG] Time Parameters: Original Local: 2025-07-01T00:00 - 2025-07-01T23:59:59 Converted Server: 2025-07-01 00:00:00 - 2025-07-01 23:59:59 Raw Time: 2025-07-01 00:00:00 & 2025-07-01 23:59:59 [DEBUG] Final request URL: http://nyzbwlw.com/situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%2000:00:00&endTime=2025-07-01%2023:59:59&size=1000&t=1754026975716 [DEBUG] Sending cookies: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A 2025-08-01 13:42:55 [Thread-1] DEBUG o.s.web.client.RestTemplate - HTTP GET http://nyzbwlw.com/situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026975716 2025-08-01 13:42:55 [Thread-1] DEBUG o.s.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*] 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.c.protocol.RequestAddCookies - CookieSpec selected: default 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.c.protocol.RequestAddCookies - Cookie [version: 0][name: JSESSIONID][value: 852AF1576F877DE9C07BC6B516B6220A][domain: nyzbwlw.com][path: /situation][expiry: null] match [nyzbwlw.com:80/situation/http/device/bug/getBugData] 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.c.protocol.RequestAuthCache - Auth cache not set in the context 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection request: [route: {}->http://nyzbwlw.com:80][total available: 1; route allocated: 1 of 2; total allocated: 1 of 20] 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[read] I/O error: Read timed out" 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection leased: [id: 0][route: {}->http://nyzbwlw.com:80][total available: 0; route allocated: 1 of 2; total allocated: 1 of 20] 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 0 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 15000 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Executing request GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026975716 HTTP/1.1 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Target auth state: UNCHALLENGED 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Proxy auth state: UNCHALLENGED 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026975716 HTTP/1.1 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept: application/json, text/plain, */* 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Connection: keep-alive 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Referer: http://nyzbwlw.com/situation/ 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Origin: http://nyzbwlw.com 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Dest: empty 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Mode: cors 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Sec-Fetch-Site: same-origin 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Host: nyzbwlw.com 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept-Encoding: gzip,deflate 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "GET /situation/http/device/bug/getBugData?deviceCode=GK2025040001&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754026975716 HTTP/1.1[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept: application/json, text/plain, */*[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Connection: keep-alive[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Referer: http://nyzbwlw.com/situation/[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Origin: http://nyzbwlw.com[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Dest: empty[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Mode: cors[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Sec-Fetch-Site: same-origin[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Host: nyzbwlw.com[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Cookie: JSESSIONID=852AF1576F877DE9C07BC6B516B6220A[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "Accept-Encoding: gzip,deflate[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 >> "[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "HTTP/1.1 200 [\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Server: nginx/1.20.2[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Date: Fri, 01 Aug 2025 05:42:55 GMT[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Content-Type: application/json;charset=UTF-8[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Transfer-Encoding: chunked[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Connection: keep-alive[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Credentials: true[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Origin: *[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Vary: Origin[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Expose-Headers: Set-Cookie[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "41[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "{"msg":"[0xe6][0x93][0x8d][0xe4][0xbd][0x9c][0xe6][0x88][0x90][0xe5][0x8a][0x9f][0xef][0xbc][0x81]","code":100,"data":{"count":0,"list":[]}}[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "0[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.wire - http-outgoing-0 << "[\r][\n]" 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << HTTP/1.1 200 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Server: nginx/1.20.2 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Date: Fri, 01 Aug 2025 05:42:55 GMT 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Content-Type: application/json;charset=UTF-8 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Transfer-Encoding: chunked 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Connection: keep-alive 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Credentials: true 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Origin: * 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Vary: Origin 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Expose-Headers: Set-Cookie 2025-08-01 13:42:55 [Thread-1] DEBUG org.apache.http.headers - http-outgoing-0 << Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.impl.execchain.MainClientExec - Connection can be kept alive indefinitely 2025-08-01 13:42:55 [Thread-1] DEBUG o.s.web.client.RestTemplate - Response 200 OK 2025-08-01 13:42:55 [Thread-1] DEBUG o.s.web.client.RestTemplate - Reading to [java.lang.String] as "application/json;charset=UTF-8" 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection [id: 0][route: {}->http://nyzbwlw.com:80] can be kept alive indefinitely 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.i.c.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 0 2025-08-01 13:42:55 [Thread-1] DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {}->http://nyzbwlw.com:80][total available: 1; route allocated: 1 of 2; total allocated: 1 of 20] [DEBUG] Response Status: 200 OK [DEBUG] Raw API response snippet: {"msg":"操作成功!","code":100,"data":{"count":0,"list":[]}} [DEBUG] Parsed API response code: 100 | message: 操作成功! [DEBUG] Found 0 valid image entries [STATS] Device: GK2025040001 | Total: 0 | Success: 0 | Failed: 0 [RESULT] Device: GK2025040001 | Date: 2025-07-01 | Found: 0 | Downloaded: 0 | Failed: 0 代码:package com.example.service; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.client.RestTemplate; import org.springframework.http.ResponseEntity; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.core.type.TypeReference; import java.util.*; import java.time.*; import java.time.format.DateTimeFormatter; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; import javax.annotation.PostConstruct; import com.example.model.BugApiResponse; import com.example.model.BugResponseData; import com.example.model.BugImageInfo; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.net.InetAddress; import java.util.stream.Collectors; import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; @Service public class BugImageDownloadService { private static final ZoneId SERVER_ZONE = ZoneId.of("Asia/Shanghai"); private static final String API_URL = "http://nyzbwlw.com/situation/http/device/bug/getBugData"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private static final DateTimeFormatter FILE_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter FILE_TIME_FORMAT = DateTimeFormatter.ofPattern("HH_mm_ss"); private final ConcurrentHashMap<String, LocalDateTime> deviceLastUpdateMap = new ConcurrentHashMap<>(); @Value("${bug.download.deviceCodes:GK2025040001,GK2025040002,GK2025040003,GK2025040004,GK2025040005,GK2025040006,GK2025040007,GK2025040008}") private List<String> deviceCodes; private final Map<String, String> cookies = new ConcurrentHashMap<>(); // 存储每个设备的下一个处理日期 private final ConcurrentHashMap<String, LocalDate> deviceNextDateMap = new ConcurrentHashMap<>(); @Value("${bug.image.save.path:F:/GKD/}") private String savePath; private final RestTemplate restTemplate; private final ObjectMapper objectMapper; public BugImageDownloadService(RestTemplate restTemplate, ObjectMapper objectMapper) { this.restTemplate = restTemplate; this.objectMapper = objectMapper; } @PostConstruct public void init() { // 所有设备从固定起始日期开始 LocalDate startDate = LocalDate.of(2025, 7, 1); for (String deviceCode : deviceCodes) { deviceNextDateMap.put(deviceCode, startDate); } System.out.println("[INIT] Device date tracking initialized. Start date: " + startDate); } /** * 持续下载所有设备的新图片 */ public void downloadNewImagesContinuously() { System.out.println("[TASK] ====== CONTINUOUS DOWNLOAD STARTED ======"); System.out.println("[INFO] Devices: " + deviceCodes.size() + " | Save path: " + savePath); while (true) { try { boolean allDevicesUpToDate = true; // 处理每个设备的历史数据 for (String deviceCode : deviceCodes) { LocalDate currentDate = deviceNextDateMap.get(deviceCode); LocalDate today = LocalDate.now(SERVER_ZONE); if (currentDate.isBefore(today)) { allDevicesUpToDate = false; // 处理该设备当前日期的数据 LocalDateTime startOfDay = currentDate.atStartOfDay(); LocalDateTime endOfDay = currentDate.atTime(23, 59, 59); System.out.printf("[PROCESS] Device: %s | Date: %s%n", deviceCode, currentDate); // 下载该日期的图片 int[] counts = downloadImagesForDevice( deviceCode, startOfDay, endOfDay, false // 标记为历史数据请求 ); // 更新设备的下一个处理日期(明天) deviceNextDateMap.put(deviceCode, currentDate.plusDays(1)); System.out.printf("[RESULT] Device: %s | Date: %s | Found: %d | Downloaded: %d | Failed: %d%n", deviceCode, currentDate, counts[0], counts[1], counts[2]); // 设备间处理间隔 Thread.sleep(2000); } } // 所有设备都处理到最新日期 if (allDevicesUpToDate) { System.out.println("[STATUS] All devices up-to-date. Starting real-time updates..."); // ===== 优化后的实时更新逻辑 ===== for (String deviceCode : deviceCodes) { // 获取上次更新时间(默认当天0点) LocalDateTime lastUpdate = deviceLastUpdateMap.getOrDefault( deviceCode, LocalDate.now(SERVER_ZONE).atStartOfDay() // 使用服务器时区 ); LocalDateTime now = LocalDateTime.now(); System.out.printf("[REALTIME] Device: %s | Time range: %s to %s%n", deviceCode, lastUpdate, now); // 修复点1:添加第四个参数 true 表示实时请求 int[] counts = downloadImagesForDevice( deviceCode, lastUpdate, // 从上次更新时间开始 now, true // 标记为实时请求 ); // 更新最后记录时间(当前轮询结束时间) deviceLastUpdateMap.put(deviceCode, now); System.out.printf("[REALTIME-RESULT] Device: %s | Downloaded: %d | Failed: %d%n", deviceCode, counts[1], counts[2]); // 设备间处理间隔 Thread.sleep(2000); } // ======================== // 等待4h后再次检查 System.out.println("[STATUS] Real-time round completed. Waiting 4 hours..."); Thread.sleep(14_400_000); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println("[ERROR] Task interrupted: " + e.getMessage()); break; } catch (Exception e) { System.err.println("[ERROR] Critical error: " + e.getMessage()); try { Thread.sleep(60_000); // 错误后等待1分钟 } catch (InterruptedException ie) { Thread.currentThread().interrupt(); break; } } } } /** * 下载指定设备在指定时间范围内的图片 */ private int[] downloadImagesForDevice(String deviceCode, LocalDateTime startTime, LocalDateTime endTime, boolean isRealtime) { int maxRetries = 3; int retryCount = 0; int waitTime = 2000; // 初始等待时间 2秒 int total = 0; int success = 0; int failed = 0; while (retryCount < maxRetries) { try { // ====== 网络诊断 ====== // ... [网络诊断代码保持不变] ... // ========== 统一时区转换逻辑 ========== ZonedDateTime serverStart = startTime.atZone(ZoneId.systemDefault()) .withZoneSameInstant(SERVER_ZONE); ZonedDateTime serverEnd = endTime.atZone(ZoneId.systemDefault()) .withZoneSameInstant(SERVER_ZONE); // 格式化为API需要的字符串(不进行手动编码) String startStr = serverStart.format(API_DATE_FORMAT); String endStr = serverEnd.format(API_DATE_FORMAT); // 调试日志增强 System.out.println("[DEBUG] Time Parameters:"); System.out.println(" Original Local: " + startTime + " - " + endTime); System.out.println(" Converted Server: " + serverStart.format(API_DATE_FORMAT) + " - " + serverEnd.format(API_DATE_FORMAT)); System.out.println(" Raw Time: " + startStr + " & " + endStr); // 使用Spring的URI构建器确保正确编码 UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(API_URL) .queryParam("deviceCode", deviceCode) .queryParam("startTime", startStr) .queryParam("endTime", endStr) .queryParam("size", 1000) .queryParam("t", System.currentTimeMillis()); URI apiUri = builder.build().encode().toUri(); String apiUrl = apiUri.toString(); System.out.println("[DEBUG] Final request URL: " + apiUrl); // ====== 创建带Cookie的请求头 ====== HttpHeaders headers = new HttpHeaders(); // 添加浏览器级 User-Agent headers.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0"); // 必须添加的请求头 headers.set("Accept", "application/json, text/plain, */*"); headers.set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"); headers.set("Connection", "keep-alive"); headers.set("Referer", "http://nyzbwlw.com/situation/"); // 关键修复:添加 Referer headers.set("Origin", "http://nyzbwlw.com"); headers.set("Sec-Fetch-Dest", "empty"); headers.set("Sec-Fetch-Mode", "cors"); headers.set("Sec-Fetch-Site", "same-origin"); // 添加 Cookie(关键修复:使用持久化 Cookie) if (!cookies.isEmpty()) { String cookieHeader = cookies.entrySet().stream() .map(entry -> entry.getKey() + "=" + entry.getValue()) .collect(Collectors.joining("; ")); headers.add("Cookie", cookieHeader); System.out.println("[DEBUG] Sending cookies: " + cookieHeader); } // 发送请求 ResponseEntity<String> response = restTemplate.exchange( apiUrl, HttpMethod.GET, new HttpEntity<>(headers), String.class); // 保存新Cookie List<String> setCookieHeaders = response.getHeaders().get("Set-Cookie"); if (setCookieHeaders != null) { for (String cookie : setCookieHeaders) { // 提取关键 Cookie(排除过期/路径信息) String[] cookieParts = cookie.split(";")[0].split("="); if (cookieParts.length >= 2) { String cookieName = cookieParts[0].trim(); String cookieValue = cookieParts[1].trim(); cookies.put(cookieName, cookieValue); System.out.println("[COOKIE] Saved session cookie: " + cookieName); } } } // 响应状态日志 System.out.println("[DEBUG] Response Status: " + response.getStatusCodeValue() + " " + response.getStatusCode().getReasonPhrase()); if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null) { String responseBody = response.getBody(); System.out.println("[DEBUG] Raw API response snippet: " + responseBody.substring(0, Math.min(300, responseBody.length())) + (responseBody.length() > 300 ? "..." : "")); // 使用POJO解析响应 BugApiResponse apiResponse = objectMapper.readValue(responseBody, BugApiResponse.class); System.out.printf("[DEBUG] Parsed API response code: %d | message: %s%n", apiResponse.getCode(), apiResponse.getMsg()); if (apiResponse.getCode() == 100) { BugResponseData data = apiResponse.getData(); List<BugImageInfo> bugList = (data != null && data.getList() != null) ? data.getList() : Collections.emptyList(); total = bugList.size(); System.out.printf("[DEBUG] Found %d valid image entries%n", total); // 如果有数据,处理并返回 if (total > 0) { for (BugImageInfo bug : bugList) { String pictureUrl = bug.getPictureUrl(); String collectionTime = bug.getCollectionTime(); if (pictureUrl != null && !pictureUrl.isEmpty() && collectionTime != null && !collectionTime.isEmpty()) { System.out.printf("[PROCESS] Downloading: %s | %s%n", collectionTime, pictureUrl); if (downloadImage(deviceCode, pictureUrl, collectionTime)) { success++; } else { failed++; } } else { System.err.printf("[WARN] Invalid data: URL=%s | Time=%s%n", pictureUrl, collectionTime); failed++; } } return new int[]{total, success, failed}; } } else { System.err.println("[API-ERROR] Device: " + deviceCode + " | Code: " + apiResponse.getCode()); } } } catch (Exception e) { System.err.println("[DOWNLOAD-ERROR] Device: " + deviceCode + " | Error: " + e.getMessage()); e.printStackTrace(); } // 如果没有数据或出错,等待后重试 retryCount++; if (retryCount < maxRetries) { try { System.out.printf("[RETRY] Retrying in %d ms (attempt %d/%d)%n", waitTime, retryCount + 1, maxRetries); Thread.sleep(waitTime); waitTime *= 2; // 指数退避 } catch (InterruptedException ie) { Thread.currentThread().interrupt(); break; } } } System.out.printf("[STATS] Device: %s | Total: %d | Success: %d | Failed: %d%n", deviceCode, total, success, failed); return new int[]{total, success, failed}; } private boolean downloadImage(String deviceCode, String imageUrl, String collectionTime) { try { LocalDateTime dateTime = LocalDateTime.parse(collectionTime, API_DATE_FORMAT); // 创建保存路径 Path saveDir = Paths.get(savePath, deviceCode, dateTime.format(FILE_DATE_FORMAT)); if (!Files.exists(saveDir)) { Files.createDirectories(saveDir); } // 生成文件名 String fileName = dateTime.format(FILE_TIME_FORMAT) + ".jpg"; Path filePath = saveDir.resolve(fileName); // 跳过已存在文件 if (Files.exists(filePath)) { return true; } // 下载图片 byte[] imageBytes = restTemplate.getForObject(imageUrl, byte[].class); if (imageBytes != null && imageBytes.length > 0) { Files.write(filePath, imageBytes); return true; } } catch (Exception e) { System.err.println("[IMAGE-ERROR] URL: " + imageUrl + " | Error: " + e.getMessage()); } return false; } }解决请求http://nyzbwlw.com/situation/http/device/bug/getBugData?deviceCode=GK2025040006&startTime=2025-07-01%252000:00:00&endTime=2025-07-01%252023:59:59&size=1000&t=1754027017557这个api返回count为0,在浏览器中输入这个url返回13条有效数据{"msg":"操作成功!","code":100,"data":{"count":13,"list":[{"eqName":"GK-7","collectionTime":"2025-07-04 05:28:09","monitorId":250704052841640,"exhibitionPath":"","num":"0","pictureUrl":"https://zzoukeqi.oss-cn-beijing.aliyuncs.com/situations/bugImgs/GK2025040007/2025-07-04/250704052841622749.jpg","pictureAnalysis":{}}

root@srv771551:~# chmod +x *.AppImage root@srv771551:~# which tabby # 应输出安装路径 tabby --version Command 'tabby' not found, did you mean: command 'ktabby' from deb kgames (2.3-1) Try: apt install <deb name> root@srv771551:~# ^C root@srv771551:~# ^C root@srv771551:~# wget https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage --2025-05-28 02:18:08-- https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage Resolving github.com (github.com)... 20.207.73.82 Connecting to github.com (github.com)|20.207.73.82|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream [following] --2025-05-28 02:18:08-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T021602Z&X-Amz-Expires=300&X-Amz-Signature=366b06d105ad23c750d2b24dfa63c80757d01eaaa1a2827052e5bdca604a9001&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.111.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 134111099 (128M) [application/octet-stream] Saving to: 'tabby-1.0.209-linux-x64.AppImage.2' tabby-1.0.209-linux-x64.AppImage.2 100%[=================================================================================================================================>] 127.90M 49.2MB/s in 2.6s 2025-05-28 02:18:12 (49.2 MB/s) - 'tabby-1.0.209-linux-x64.AppImage.2' saved [134111099/134111099] root@srv771551:~# sudo apt install libfuse2 # AppImage运行必需的基础依赖[^2] Reading package lists... Done Building dependency tree... Done Reading state information... Done Note, selecting 'libfuse2t64' instead of 'libfuse2' libfuse2t64 is already the newest version (2.9.9-8.1build1). libfuse2t64 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@srv771551:~# chmod +x tabby-*.AppImage root@srv771551:~# ./tabby-*.AppImage [0528/021833.570631:FATAL:electron_main_delegate.cc(294)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. Trace/breakpoint trap (core dumped) root@srv771551:~# # 将Tabby添加到应用程序菜单 sudo mkdir -p /usr/local/bin sudo mv tabby-*.AppImage /usr/local/bin/tabby root@srv771551:~# sudo apt install fuse3 Reading package lists... Done Building dependency tree... Done Reading state information... Done fuse3 is already the newest version (3.14.0-5build1). fuse3 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@srv771551:~# sha256sum tabby-*.AppImage | grep $(curl -sL 发布页 | grep sha256) sha256sum: 'tabby-*.AppImage': No such file or directory Usage: grep [OPTION]... PATTERNS [FILE]... Try 'grep --help' for more information. root@srv771551:~# ^C root@srv771551:~# ^C root@srv771551:~# # 启用universe仓库并安装gconf2 sudo add-apt-repository universe sudo apt update sudo apt install libgconf-2-4 # Ubuntu 24.04中替代旧版gconf2的兼容库[^2] Adding component(s) 'universe' to all repositories. Press [ENTER] to continue or Ctrl-c to cancel. Hit:1 https://repository.monarx.com/repository/ubuntu-noble noble InRelease Hit:2 http://in.archive.ubuntu.com/ubuntu noble InRelease Get:3 http://in.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB] Hit:4 http://in.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:5 http://in.archive.ubuntu.com/ubuntu noble-security InRelease Fetched 126 kB in 1s (85.5 kB/s) Reading package lists... Done Hit:1 https://repository.monarx.com/repository/ubuntu-noble noble InRelease Hit:2 http://in.archive.ubuntu.com/ubuntu noble InRelease Hit:3 http://in.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:4 http://in.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:5 http://in.archive.ubuntu.com/ubuntu noble-security InRelease Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package libgconf-2-4 root@srv771551:~# # 下载最新AppImage(需替换版本号) wget https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage # 安装运行时依赖 sudo apt install libfuse2 libgtk-3-0 libnss3 libasound2 # GUI应用基础依赖[^2] # 赋予执行权限 chmod +x tabby-*.AppImage --2025-05-28 02:21:43-- https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.AppImage Resolving github.com (github.com)... 20.207.73.82 Connecting to github.com (github.com)|20.207.73.82|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T022143Z&X-Amz-Expires=300&X-Amz-Signature=df4d6c5bf9de994902474c1591582aa3677b65da50a2235344d5f54aab0dbae4&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream [following] --2025-05-28 02:21:43-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/77213120/6838174f-aae8-46a8-875f-4adc31805938?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250528%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250528T022143Z&X-Amz-Expires=300&X-Amz-Signature=df4d6c5bf9de994902474c1591582aa3677b65da50a2235344d5f54aab0dbae4&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dtabby-1.0.209-linux-x64.AppImage&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.111.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 134111099 (128M) [application/octet-stream] Saving to: 'tabby-1.0.209-linux-x64.AppImage' tabby-1.0.209-linux-x64.AppImage 100%[================================================================================================================================>] 127.90M 42.1MB/s in 3.0s 2025-05-28 02:21:47 (42.1 MB/s) - 'tabby-1.0.209-linux-x64.AppImage' saved [134111099/134111099] Reading package lists... Done Building dependency tree... Done Reading state information... Done Note, selecting 'libfuse2t64' instead of 'libfuse2' Note, selecting 'libgtk-3-0t64' instead of 'libgtk-3-0' Package libasound2 is a virtual package provided by: liboss4-salsa-asound2 4.2-build2020-1ubuntu3 libasound2t64 1.2.11-1build2 (= 1.2.11-1build2) You should explicitly select one to install. E: Package 'libasound2' has no installation candidate root@srv771551:~# # 以普通用户身份运行(推荐) ./tabby-*.AppImage --no-sandbox # 若必须使用root: echo 'alias tabby="~/tabby-*.AppImage --no-sandbox"' >> ~/.bashrc source ~/.bashrc [2670:0528/022155.492429:ERROR:ozone_platform_x11.cc(240)] Missing X server or $DISPLAY [2670:0528/022155.492527:ERROR:env.cc(255)] The platform failed to initialize. Exiting. root@srv771551:~# # 创建桌面快捷方式 cat > ~/.local/share/applications/tabby.desktop <<EOF [Desktop Entry] Name=Tabby Exec=/path/to/tabby.AppImage --no-sandbox Icon=/path/to/icon.png Type=Application Categories=Development; EOF -bash: /root/.local/share/applications/tabby.desktop: No such file or directory root@srv771551:~# sudo apt upgrade Reading package lists... Done Building dependency tree... Done Reading state information... Done Calculating upgrade... Done Get more security updates through Ubuntu Pro with 'esm-apps' enabled: libzvbi-common libwinpr2-2t64 libcjson1 libpostproc57 libavcodec60 libzvbi0t64 libavutil58 libswscale7 libfreerdp-server2-2t64 libswresample4 7zip libavformat60 libfreerdp2-2t64 libavfilter9 Learn more about Ubuntu Pro at https://ubuntu.com/pro 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@srv771551:~# sudo ubuntu-drivers autoinstall All the available drivers are already installed. root@srv771551:~# export GTK_IM_MODULE=ibus root@srv771551:~#

5-03-20 00:25:24,075 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25 2025-03-20 00:25:24,081 INFO namenode.FSNamesystem: Retry cache on namenode is enabled 2025-03-20 00:25:24,081 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry c ache entry expiry time is 600000 millis2025-03-20 00:25:24,085 INFO util.GSet: Computing capacity for map NameNodeRetryCache 2025-03-20 00:25:24,085 INFO util.GSet: VM type = 64-bit 2025-03-20 00:25:24,085 INFO util.GSet: 0.029999999329447746% max memory 405.5 MB = 124.6 KB 2025-03-20 00:25:24,085 INFO util.GSet: capacity = 2^14 = 16384 entries 2025-03-20 00:25:24,293 INFO namenode.FSImage: Allocated new BlockPoolId: BP-241692134-192.168.3.111-17 424015242842025-03-20 00:25:24,312 INFO common.Storage: Storage directory /data/namenode has been successfully for matted.2025-03-20 00:25:24,347 INFO namenode.FSImageFormatProtobuf: Saving image file /data/namenode/current/f simage.ckpt_0000000000000000000 using no compression2025-03-20 00:25:24,571 INFO namenode.FSImageFormatProtobuf: Image file /data/namenode/current/fsimage. ckpt_0000000000000000000 of size 399 bytes saved in 0 seconds .2025-03-20 00:25:24,586 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 02025-03-20 00:25:24,600 INFO blockmanagement.DatanodeManager: Slow peers collection thread shutdown 2025-03-20 00:25:24,604 INFO namenode.FSNamesystem: Stopping services started for active state 2025-03-20 00:25:24,605 INFO namenode.FSNamesystem: Stopping services started for standby state 2025-03-20 00:25:24,609 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown .2025-03-20 00:25:24,609 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at node11/192.168.3.111 ************************************************************/ [root@node11 ~]# start-dfs.sh Starting namenodes on [

kibana.service - Kibana Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2025-06-18 14:47:17 CST; 6min ago Docs: https://www.elastic.co Main PID: 2687232 (node) Tasks: 11 Memory: 962.9M CGroup: /system.slice/kibana.service └─2687232 /hatech/kibana-7.17.9-linux-aarch64/bin/../node/bin/node /hatech/kibana-7.17.9-linux-aarch64/bin/../src/cli/dist 6月 18 14:47:32 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:32+08:00","tags":["warning","plugins","security","config"],"pid":2687232,"message":"Generating a random key fo> 6月 18 14:47:32 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:32+08:00","tags":["warning","plugins","security","config"],"pid":2687232,"message":"Session cookies will be tr> 6月 18 14:47:32 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:32+08:00","tags":["warning","plugins","reporting","config"],"pid":2687232,"message":"为 xpack.reporting.encryp> 6月 18 14:47:32 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:32+08:00","tags":["warning","plugins","encryptedSavedObjects"],"pid":2687232,"message":"Saved objects encrypti> 6月 18 14:47:32 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:32+08:00","tags":["warning","plugins","actions"],"pid":2687232,"message":"APIs are disabled because the Encryp> 6月 18 14:47:32 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:32+08:00","tags":["warning","plugins","alerting"],"pid":2687232,"message":"APIs are disabled because the Encry> 6月 18 14:47:32 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:32+08:00","tags":["info","plugins","ruleRegistry"],"pid":2687232,"message":"Installing common resources shared> 6月 18 14:47:33 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:33+08:00","tags":["info","plugins","reporting","config"],"pid":2687232,"message":"Chromium 沙盒提供附加保护层 > 6月 18 14:47:33 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:33+08:00","tags":["warning","process"],"pid":2687232,"message":"Error [ProductNotSupportedSecurityError]: The > 6月 18 14:47:33 b-07-ywlxx-app01 kibana[2687232]: {"type":"log","@timestamp":"2025-06-18T14:47:33+08:00","tags":["error","elasticsearch-service"],"pid":2687232,"message":"Unable to retrieve version informa>

# Ultralytics YOLO 🚀, AGPL-3.0 license # Default training settings and hyperparameters for medium-augmentation COCO training #中等增强的COCO训练的默认训练设置和超参数 task: detect # (str) YOLO task, i.e. detect, segment, classify, pose mode: train # (str) YOLO mode, i.e. train, val, predict, export, track, benchmark # Train settings ------------------------------------------------------------------------------------------------------- model: # (str, optional) path to model file, i.e. yolov8n.pt, yolov8n.yaml data: # (str, optional) path to data file, i.e. coco128.yaml epochs: 100 # (int) number of epochs to train for time: # (float, optional) number of hours to train for, overrides epochs if supplied patience: 20 # (int) epochs to wait for no observable improvement for early stopping of training batch: 20 # (int) number of images per batch (-1 for AutoBatch)!!!!!!! imgsz: 640 # (int | list) input images size as int for train and val modes, or list[w,h] for predict and export modes save: True # (bool) save train checkpoints and predict results save_period: -1 # (int) Save checkpoint every x epochs (disabled if < 1) cache: False # (bool) True/ram, disk or False. Use cache for data loading device: 0 # (int | str | list, optional) device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu workers: 8 # (int) number of worker threads for data loading (per RANK if DDP)!!!!!!! project: # (str, optional) project name name: # (str, optional) experiment name, results saved to 'project/name' directory exist_ok: False # (bool) whether to overwrite existing experiment pretrained: True # (bool | str) whether to use a pretrained model (bool) or a model to load weights from (str) optimizer: auto # (str) optimizer to use, choices=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto] verbose: True # (bool) whether to print verbose output seed: 0 # (int) random seed for reproducibility deterministic: True # (bool) whether to enable deterministic mode single_cls: False # (bool) train multi-class data as single-class rect: False # (bool) rectangular training if mode='train' or rectangular validation if mode='val' cos_lr: False # (bool) use cosine learning rate scheduler close_mosaic: 10 # (int) disable mosaic augmentation for final epochs (0 to disable) resume: False # (bool) resume training from last checkpoint amp: True # (bool) Automatic Mixed Precision (AMP) training, choices=[True, False], True runs AMP check fraction: 1.0 # (float) dataset fraction to train on (default is 1.0, all images in train set) profile: False # (bool) profile ONNX and TensorRT speeds during training for loggers freeze: None # (int | list, optional) freeze first n layers, or freeze list of layer indices during training # Segmentation overlap_mask: True # (bool) masks should overlap during training (segment train only) mask_ratio: 2 # (int) mask downsample ratio (segment train only) # Classification dropout: 0.0 # (float) use dropout regularization (classify train only) # Val/Test settings ---------------------------------------------------------------------------------------------------- val: True # (bool) validate/test during training split: val # (str) dataset split to use for validation, i.e. 'val', 'test' or 'train' save_json: False # (bool) save results to JSON file save_hybrid: False # (bool) save hybrid version of labels (labels + additional predictions) conf: 0.3 # 置信度(float, optional) object confidence threshold for detection (default 0.25 predict, 0.001 val) iou: 0.8 # (float) intersection over union (IoU) threshold for NMS max_det: 300 # (int) maximum number of detections per image half: False # (bool) use half precision (FP16) dnn: False # (bool) use OpenCV DNN for ONNX inference plots: True # (bool) save plots and images during train/val # Predict settings ----------------------------------------------------------------------------------------------------- source: # (str, optional) source directory for images or videos vid_stride: 1 # (int) video frame-rate stride stream_buffer: False # (bool) buffer all streaming frames (True) or return the most recent frame (False) visualize: False # (bool) visualize model features augment: False # (bool) apply image augmentation to prediction sources agnostic_nms: False # (bool) class-agnostic NMS classes: # (int | list[int], optional) filter results by class, i.e. classes=0, or classes=[0,2,3] retina_masks: True # (bool) use high-resolution segmentation masks # Visualize settings --------------------------------------------------------------------------------------------------- show: False # (bool) show predicted images and videos if environment allows save_frames: False # (bool) save predicted individual video frames save_txt: False # (bool) save results as .txt file save_conf: False # (bool) save results with confidence scores save_crop: False # (bool) save cropped images with results show_labels: True # (bool) show prediction labels, i.e. 'person' show_conf: True # (bool) show prediction confidence, i.e. '0.99' show_boxes: True # (bool) show prediction boxes line_width: # (int, optional) line width of the bounding boxes. Scaled to image size if None. # Export settings ------------------------------------------------------------------------------------------------------ format: torchscript # (str) format to export to, choices at https://docs.ultralytics.com/modes/export/#export-formats keras: False # (bool) use Kera=s optimize: False # (bool) TorchScript: optimize for mobile int8: False # (bool) CoreML/TF INT8 quantization dynamic: False # (bool) ONNX/TF/TensorRT: dynamic axes simplify: False # (bool) ONNX: simplify model opset: # (int, optional) ONNX: opset version workspace: 4 # (int) TensorRT: workspace size (GB) nms: False # (bool) CoreML: add NMS # Hyperparameters ------------------------------------------------------------------------------------------------------ lr0: 0.01 # (float) initial learning rate (i.e. SGD=1E-2, Adam=1E-3) lrf: 0.01 # (float) final learning rate (lr0 * lrf) momentum: 0.937 # (float) SGD momentum/Adam beta1 weight_decay: 0.0005 # (float) optimizer weight decay 5e-4 warmup_epochs: 3.0 # (float) warmup epochs (fractions ok) warmup_momentum: 0.8 # (float) warmup initial momentum warmup_bias_lr: 0.1 # (float) warmup initial bias lr box: 7.5 # (float) box loss gain cls: 0.5 # (float) cls loss gain (scale with pixels) dfl: 1.5 # (float) dfl loss gain pose: 12.0 # (float) pose loss gain kobj: 1.0 # (float) keypoint obj loss gain label_smoothing: 0.0 # (float) label smoothing (fraction) nbs: 64 # (int) nominal batch size hsv_h: 0 # (float) image HSV-Hue augmentation (fraction) 0.015 hsv_s: 0 # (float) image HSV-Saturation augmentation (fraction)0.7 hsv_v: 0 # (float) image HSV-Value augmentation (fraction)0.4 degrees: 0.0 # (float) image rotation (+/- deg) translate: 0.1 # (float) image translation (+/- fraction) scale: 0.5 # (float) image scale (+/- gain) shear: 0.0 # (float) image shear (+/- deg) perspective: 0.0 # (float) image perspective (+/- fraction), range 0-0.001 flipud: 0 # (float) image flip up-down (probability)0.5 fliplr: 0 # (float) image flip left-right (probability)0.5 mosaic: 1 # (float) image mosaic (probability)1.0 mixup: 0.0 # (float) image mixup (probability) copy_paste: 0.0 # (float) segment copy-paste (probability) # Custom config.yaml --------------------------------------------------------------------------------------------------- cfg: # (str, optional) for overriding defaults.yaml # Tracker settings ------------------------------------------------------------------------------------------------------ tracker: botsort.yaml # (str) tracker type, choices=[botsort.yaml, bytetrack.yaml] 帮我介绍一下这些参数

[INFO|2025-03-04 15:01:37] configuration_utils.py:771 >> Model config LlamaConfig { "architectures": [ "LlamaForCausalLM" ], "attention_bias": false, "attention_dropout": 0.0, "bos_token_id": 128000, "eos_token_id": 128009, "head_dim": 128, "hidden_act": "silu", "hidden_size": 4096, "initializer_range": 0.02, "intermediate_size": 14336, "max_position_embeddings": 8192, "mlp_bias": false, "model_type": "llama", "num_attention_heads": 32, "num_hidden_layers": 32, "num_key_value_heads": 8, "pretraining_tp": 1, "rms_norm_eps": 1e-05, "rope_scaling": null, "rope_theta": 500000.0, "tie_word_embeddings": false, "torch_dtype": "bfloat16", "transformers_version": "4.49.0", "use_cache": true, "vocab_size": 128256 } [INFO|2025-03-04 15:01:37] tokenization_utils_base.py:2500 >> tokenizer config file saved in saves/Llama-3-8B-Instruct/lora/train_2025-03-04-14-57-37/tokenizer_config.json [INFO|2025-03-04 15:01:37] tokenization_utils_base.py:2509 >> Special tokens file saved in saves/Llama-3-8B-Instruct/lora/train_2025-03-04-14-57-37/special_tokens_map.json [WARNING|2025-03-04 15:01:37] logging.py:162 >> No metric loss to plot. [WARNING|2025-03-04 15:01:37] logging.py:162 >> No metric eval_loss to plot. [WARNING|2025-03-04 15:01:37] logging.py:162 >> No metric eval_accuracy to plot. [INFO|2025-03-04 15:01:37] trainer.py:4258 >> ***** Running Evaluation ***** [INFO|2025-03-04 15:01:37] trainer.py:4260 >> Num examples = 8 [INFO|2025-03-04 15:01:37] trainer.py:4263 >> Batch size = 2 [INFO|2025-03-04 15:01:38] modelcard.py:449 >> Dropping the following result as it does not have all the necessary fields: {'task': {'name': 'Causal Language Modeling', 'type': 'text-generation'}}

/content Mounted at /content/drive env: PYTHONDONTWRITEBYTECODE=1 env: TF_CPP_MIN_LOG_LEVEL=1 41 packages can be upgraded. Run 'apt list --upgradable' to see them. W: Skipping acquire of configured file 'main/source/Sources' as repository 'https://r2u.stat.illinois.edu/ubuntu jammy InRelease' does not seem to provide it (sources.list entry misspelt?) --2025-07-10 10:19:00-- https://github.com/camenduru/gperftools/releases/download/v1.0/libtcmalloc_minimal.so.4 Resolving github.com (github.com)... 140.82.113.4 Connecting to github.com (github.com)|140.82.113.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/669786276/620e2e64-be9f-4599-904f-18ee3811e159?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250710%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250710T101901Z&X-Amz-Expires=1800&X-Amz-Signature=b5c26ca3d158bb5b88d2b09125b067e065003244102eeb42a1d86a5fc1b6c62e&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dlibtcmalloc_minimal.so.4&response-content-type=application%2Foctet-stream [following] --2025-07-10 10:19:01-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/669786276/620e2e64-be9f-4599-904f-18ee3811e159?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250710%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250710T101901Z&X-Amz-Expires=1800&X-Amz-Signature=b5c26ca3d158bb5b88d2b09125b067e065003244102eeb42a1d86a5fc1b6c62e&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dlibtcmalloc_minimal.so.4&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 373960 (365K) [application/octet-stream] Saving to: ‘/content/libtcmalloc_minimal.so.4’ /content/libtcmallo 100%[===================>] 365.20K --.-KB/s in 0.02s 2025-07-10 10:19:01 (15.2 MB/s) - ‘/content/libtcmalloc_minimal.so.4’ saved [373960/373960] env: LD_PRELOAD=/content/libtcmalloc_minimal.so.4 libcairo2-dev is already the newest version (1.16.0-5ubuntu2). python3-dev is already the newest version (3.10.6-1~22.04.1). python3-dev set to manually installed. The following packages were automatically installed and are no longer required: libbz2-dev libpkgconf3 libreadline-dev Use 'apt autoremove' to remove them. The following packages will be REMOVED: pkgconf r-base-dev The following NEW packages will be installed: aria2 libaria2-0 libc-ares2 pkg-config 0 upgraded, 4 newly installed, 2 to remove and 41 not upgraded. Need to get 1,561 kB of archives. After this operation, 5,430 kB of additional disk space will be used. (Reading database ... 126281 files and directories currently installed.) Removing r-base-dev (4.5.1-1.2204.0) ... dpkg: pkgconf: dependency problems, but removing anyway as you requested: libsndfile1-dev:amd64 depends on pkg-config; however: Package pkg-config is not installed. Package pkgconf which provides pkg-config is to be removed. libopencv-dev depends on pkg-config; however: Package pkg-config is not installed. Package pkgconf which provides pkg-config is to be removed. libmkl-dev:amd64 depends on pkg-config; however: Package pkg-config is not installed. Package pkgconf which provides pkg-config is to be removed. libjack-dev depends on pkg-config; however: Package pkg-config is not installed. Package pkgconf which provides pkg-config is to be removed. libgphoto2-dev:amd64 depends on pkg-config; however: Package pkg-config is not installed. Package pkgconf which provides pkg-config is to be removed. libglib2.0-dev:amd64 depends on pkg-config; however: Package pkg-config is not installed. Package pkgconf which provides pkg-config is to be removed. libfontconfig-dev:amd64 depends on pkg-config; however: Package pkg-config is not installed. Package pkgconf which provides pkg-config is to be removed. Removing pkgconf (1.8.0-1) ... Removing 'diversion of /usr/bin/pkg-config to /usr/bin/pkg-config.real by pkgconf' Removing 'diversion of /usr/share/aclocal/pkg.m4 to /usr/share/aclocal/pkg.real.m4 by pkgconf' Removing 'diversion of /usr/share/man/man1/pkg-config.1.gz to /usr/share/man/man1/pkg-config.real.1.gz by pkgconf' Removing 'diversion of /usr/share/pkg-config-crosswrapper to /usr/share/pkg-config-crosswrapper.real by pkgconf' Selecting previously unselected package pkg-config. (Reading database ... 126257 files and directories currently installed.) Preparing to unpack .../pkg-config_0.29.2-1ubuntu3_amd64.deb ... Unpacking pkg-config (0.29.2-1ubuntu3) ... Selecting previously unselected package libc-ares2:amd64. Preparing to unpack .../libc-ares2_1.18.1-1ubuntu0.22.04.3_amd64.deb ... Unpacking libc-ares2:amd64 (1.18.1-1ubuntu0.22.04.3) ... Selecting previously unselected package libaria2-0:amd64. Preparing to unpack .../libaria2-0_1.36.0-1_amd64.deb ... Unpacking libaria2-0:amd64 (1.36.0-1) ... Selecting previously unselected package aria2. Preparing to unpack .../aria2_1.36.0-1_amd64.deb ... Unpacking aria2 (1.36.0-1) ... Setting up libc-ares2:amd64 (1.18.1-1ubuntu0.22.04.3) ... Setting up pkg-config (0.29.2-1ubuntu3) ... Setting up libaria2-0:amd64 (1.36.0-1) ... Setting up aria2 (1.36.0-1) ... Processing triggers for man-db (2.10.2-1) ... Processing triggers for libc-bin (2.35-0ubuntu3.8) ... /sbin/ldconfig.real: /usr/local/lib/libtcm_debug.so.1 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_0.so.3 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libur_adapter_opencl.so.0 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libtbbmalloc.so.2 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libtbb.so.12 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libtbbbind.so.3 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libur_loader.so.0 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_5.so.3 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libhwloc.so.15 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero.so.0 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libumf.so.0 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libtbbmalloc_proxy.so.2 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero_v2.so.0 is not a symbolic link /sbin/ldconfig.real: /usr/local/lib/libtcm.so.1 is not a symbolic link The following packages were automatically installed and are no longer required: libbz2-dev libpkgconf3 libreadline-dev Use 'apt autoremove' to remove them. The following NEW packages will be installed: unionfs-fuse 0 upgraded, 1 newly installed, 0 to remove and 41 not upgraded. Need to get 48.7 kB of archives. After this operation, 146 kB of additional disk space will be used. Selecting previously unselected package unionfs-fuse. (Reading database ... 126346 files and directories currently installed.) Preparing to unpack .../unionfs-fuse_1.0-1ubuntu2_amd64.deb ... Unpacking unionfs-fuse (1.0-1ubuntu2) ... Setting up unionfs-fuse (1.0-1ubuntu2) ... Processing triggers for man-db (2.10.2-1) ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3/2.3 GB 444.7 kB/s eta 0:00:00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.1/6.1 MB 89.3 MB/s eta 0:00:00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4/4.4 MB 76.9 MB/s eta 0:00:00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 16.6 MB/s eta 0:00:00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 78.7 MB/s eta 0:00:00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.3/63.3 MB 11.3 MB/s eta 0:00:00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.4/96.4 kB 3.0 MB/s eta 0:00:00 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. torchtune 0.6.1 requires torchdata==0.11.0, but you have torchdata 0.6.0 which is incompatible. ERROR: Could not find a version that satisfies the requirement xformers==0.0.19 (from versions: 0.0.1, 0.0.2, 0.0.3, 0.0.4, 0.0.5, 0.0.6, 0.0.7, 0.0.8, 0.0.9, 0.0.10, 0.0.11, 0.0.12, 0.0.13, 0.0.16rc424, 0.0.16rc425, 0.0.16, 0.0.20, 0.0.21, 0.0.22, 0.0.22.post7, 0.0.23, 0.0.23.post1, 0.0.24, 0.0.25, 0.0.25.post1, 0.0.26.post1, 0.0.27, 0.0.27.post1, 0.0.27.post2, 0.0.28, 0.0.28.post1, 0.0.28.post2, 0.0.28.post3, 0.0.29, 0.0.29.post1, 0.0.29.post2, 0.0.29.post3, 0.0.30, 0.0.31, 0.0.31.post1, 0.0.32.dev1062, 0.0.32.dev1064) ERROR: No matching distribution found for xformers==0.0.19 Failed to open /content/drive/MyDrive/stable-diffusion-webui-colab/stable-diffusion-webui/extensions/sd-webui-additional-networks/models/lora/: No such file or directory. Aborting! /content/drive/MyDrive/stable-diffusion-webui-colab/stable-diffusion-webui Updating files: 100% (203/203), done. HEAD is now at 22bcc7be attempted fix for infinite loading for settings that some people experience Updating files: 100% (135/135), done. HEAD is now at cf1d67a Update modelcard.md HEAD is now at c202932 GRADIO_TUNNEL online Already up to date. Download Results: gid |stat|avg speed |path/URI ======+====+===========+======================================================= 20d2be|OK | 0B/s|/content/drive/MyDrive/stable-diffusion-webui-colab/stable-diffusion-webui/models/CLIP/ViT-L-14.pt Status Legend: (OK):download completed. Python 3.11.13 (main, Jun 4 2025, 08:57:29) [GCC 11.4.0] Commit hash: 22bcc7be428c94e9408f589966c2040187245d81 Installing gfpgan Installing clip Installing open_clip Installing xformers Traceback (most recent call last): File "/content/drive/MyDrive/stable-diffusion-webui-colab/stable-diffusion-webui/launch.py", line 355, in <module> prepare_environment() File "/content/drive/MyDrive/stable-diffusion-webui-colab/stable-diffusion-webui/launch.py", line 281, in prepare_environment run_pip(f"install {xformers_package}", "xformers") File "/content/drive/MyDrive/stable-diffusion-webui-colab/stable-diffusion-webui/launch.py", line 129, in run_pip return run(f'"{python}" -m pip {args} --prefer-binary{index_url_line}', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/content/drive/MyDrive/stable-diffusion-webui-colab/stable-diffusion-webui/launch.py", line 97, in run raise RuntimeError(message) RuntimeError: Couldn't install xformers. Command: "/usr/bin/python3" -m pip install xformers==0.0.16rc425 --prefer-binary Error code: 1 stdout: Collecting xformers==0.0.16rc425 Downloading xformers-0.0.16rc425.tar.gz (7.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.3/7.3 MB 81.4 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Requirement already satisfied: torch>=1.12 in /usr/local/lib/python3.11/dist-packages (from xformers==0.0.16rc425) (2.0.0+cu118) Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from xformers==0.0.16rc425) (2.0.2) Collecting pyre-extensions==0.0.23 (from xformers==0.0.16rc425) Downloading pyre_extensions-0.0.23-py3-none-any.whl.metadata (4.0 kB) Collecting typing-inspect (from pyre-extensions==0.0.23->xformers==0.0.16rc425) Downloading typing_inspect-0.9.0-py3-none-any.whl.metadata (1.5 kB) Requirement already satisfied: typing-extensions in /usr/local/lib/python3.11/dist-packages (from pyre-extensions==0.0.23->xformers==0.0.16rc425) (4.14.1) Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch>=1.12->xformers==0.0.16rc425) (3.18.0) Requirement already satisfied: sympy in /usr/local/lib/python3.11/dist-packages (from torch>=1.12->xformers==0.0.16rc425) (1.13.1) Requirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch>=1.12->xformers==0.0.16rc425) (3.5) Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch>=1.12->xformers==0.0.16rc425) (3.1.6) Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.11/dist-packages (from torch>=1.12->xformers==0.0.16rc425) (2.0.0) Requirement already satisfied: cmake in /usr/local/lib/python3.11/dist-packages (from triton==2.0.0->torch>=1.12->xformers==0.0.16rc425) (3.31.6) Requirement already satisfied: lit in /usr/local/lib/python3.11/dist-packages (from triton==2.0.0->torch>=1.12->xformers==0.0.16rc425) (18.1.8) Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch>=1.12->xformers==0.0.16rc425) (3.0.2) Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy->torch>=1.12->xformers==0.0.16rc425) (1.3.0) Collecting mypy-extensions>=0.3.0 (from typing-inspect->pyre-extensions==0.0.23->xformers==0.0.16rc425) Downloading mypy_extensions-1.1.0-py3-none-any.whl.metadata (1.1 kB) Downloading pyre_extensions-0.0.23-py3-none-any.whl (11 kB) Downloading typing_inspect-0.9.0-py3-none-any.whl (8.8 kB) Downloading mypy_extensions-1.1.0-py3-none-any.whl (5.0 kB) Building wheels for collected packages: xformers Building wheel for xformers (setup.py): started Building wheel for xformers (setup.py): finished with status 'error' Running setup.py clean for xformers Failed to build xformers stderr: error: subprocess-exited-with-error × python setup.py bdist_wheel did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for xformers ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (xformers)

025.06.26-06.30.25:266][ 0]LogWorld: Bringing World /Game/ThirdPerson/Maps/ThirdPersonMap.ThirdPersonMap up for play (max tick rate 30) at 2025.06.26-14.30.25 [2025.06.26-06.30.25:406][ 0]LogWorld: Bringing up level for play took: 0.527045 [2025.06.26-06.30.25:480][ 0]LogWorldPartition: UWorldPartitionStreamingPolicy: CellsToActivate(1), CellsToLoad(0), CellsToUnload(0) [2025.06.26-06.30.25:481][ 0]LogLoad: Took 1.988112 seconds to LoadMap(/Game/ThirdPerson/Maps/ThirdPersonMap) [2025.06.26-06.30.25:489][ 0]LogPakFile: AllPaks IndexSizes: DirectoryHashSize=170976, PathHashSize=16, EntriesSize=21840, TotalSize=192832 [2025.06.26-06.30.25:531][ 0]LogInit: Display: Engine is initialized. Leaving FEngineLoop::Init() [2025.06.26-06.30.25:531][ 0]LogLoad: (Engine Initialization) Total time: 2.81 seconds [2025.06.26-06.31.44:020][323]LogNet: NotifyAcceptingConnection accepted from: 127.0.0.1:62748 [2025.06.26-06.31.44:053][323]LogNetVersion: Test8 1.0.0.0, NetCL: 0, EngineNetworkVersion: 32, GameNetworkVersion: 0 (Checksum: 3657059995) [2025.06.26-06.31.44:053][323]LogHandshake: CheckVersion: Incompatible version. bValidHandshakeVersion: 1, bValidNetVersion: 0, GHandshakeEnforceNetworkCLVersion: 0, RemoteMinVersion: 3, RemoteCurVersion: 4, MinSupportedHandshakeVersion: 3, CurrentHandshakeVersion: 4, RemoteNetworkVersion: 2125702671, LocalNetworkVersion: 3657059995, RemoteNetworkFeatures: LegacyReplication, LocalNetworkFeatures: LegacyReplication [2025.06.26-06.31.44:054][323]LogHandshake: SendConnectChallenge. Timestamp: 78.393076, Cookie: 074090142225080009159078201238178221048095237252178219037011 [2025.06.26-06.31.44:061][323]LogNet: NotifyAcceptingConnection accepted from: 127.0.0.1:62748 [2025.06.26-06.31.44:061][323]LogHandshake: CheckVersion: Incompatible version. bValidHandshakeVersion: 1, bValidNetVersion: 0, GHandshakeEnforceNetworkCLVersion: 0, RemoteMinVersion: 3, RemoteCurVersion: 4, MinSupportedHandshakeVersion: 3, CurrentHandshakeVersion: 4, RemoteNetworkVersion: 2125702671, LocalNetworkVersion: 3657059995, RemoteNetworkFeatures: LegacyReplication, LocalNetworkFeatures: LegacyReplication [2025.06.26-06.31.44:061][323]LogHandshake: SendChallengeAck. InCookie: 074090142225080009159078201238178221048095237252178219037011 [2025.06.26-06.31.44:061][323]LogNet: Server accepting post-challenge connection from: 127.0.0.1:62748 [2025.06.26-06.31.44:061][323]LogNet: IpConnection_2147482505 setting maximum channels to: 32767 [2025.06.26-06.31.44:080][323]PacketHandlerLog: Loaded PacketHandler component: Engine.EngineHandlerComponentFactory (StatelessConnectHandlerComponent) [2025.06.26-06.31.44:119][323]LogNet: NotifyAcceptedConnection: Name: ThirdPersonMap, TimeStamp: 06/26/25 14:31:44, [UNetConnection] RemoteAddr: 127.0.0.1:62748, Name: IpConnection_2147482505, Driver: GameNetDriver IpNetDriver_2147482512, IsServer: YES, PC: NULL, Owner: NULL, UniqueId: INVALID [2025.06.26-06.31.44:119][323]LogNet: AddClientConnection: Added client connection: [UNetConnection] RemoteAddr: 127.0.0.1:62748, Name: IpConnection_2147482505, Driver: GameNetDriver IpNetDriver_2147482512, IsServer: YES, PC: NULL, Owner: NULL, UniqueId: INVALID [2025.06.26-06.31.44:137][323]LogNet: NotifyAcceptingChannel Control 0 server World /Game/ThirdPerson/Maps/ThirdPersonMap.ThirdPersonMap: Accepted [2025.06.26-06.31.44:170][323]LogNet: Remote platform little endian=1 [2025.06.26-06.31.44:170][323]LogNet: This platform little endian=1 [2025.06.26-06.31.44:171][323]LogNet: NotifyControlMessage: Client IpConnection_2147482505 connecting with invalid version. LocalNetworkVersion: 3657059995, RemoteNetworkVersion: 2125702671, LocalNetFeatures=LegacyReplication, RemoteNetFeatures=LegacyReplication [2025.06.26-06.31.44:302][323]LogNet: UNetConnection::Close: [UNetConnection] RemoteAddr: 127.0.0.1:62748, Name: IpConnection_2147482505, Driver: GameNetDriver IpNetDriver_2147482512, IsServer: YES, PC: NULL, Owner: NULL, UniqueId: INVALID, Channels: 3, Time: 2025.06.26-06.31.44 [2025.06.26-06.31.44:302][323]LogNet: UNetConnection::SendCloseReason: [2025.06.26-06.31.44:306][323]LogNet: - Result=Upgrade, ErrorContext="Upgrade" [2025.06.26-06.31.44:307][323]LogNet: UChannel::Close: Sending CloseBunch. ChIndex == 0. Name: [UChannel] ChIndex: 0, Closing: 0 [UNetConnection] RemoteAddr: 127.0.0.1:62748, Name: IpConnection_2147482505, Driver: GameNetDriver IpNetDriver_2147482512, IsServer: YES, PC: NULL, Owner: NULL, UniqueId: INVALID [2025.06.26-06.31.44:604][324]LogStreaming: Display: 0.002 ms for processing 16 objects in RemoveUnreachableObjects(Queued=0, Async=0). Removed 0 (146->146) packages and 2 (218->216) public exports. [2025.06.26-06.31.44:620][324]LogNet: UNetConnection::PendingConnectionLost. [UNetConnection] RemoteAddr: 127.0.0.1:62748, Name: IpConnection_2147482505, Driver: GameNetDriver IpNetDriver_2147482512, IsServer: YES, PC: NULL, Owner: NULL, UniqueId: INVALID bPendingDestroy=0 [2025.06.26-06.31.44:640][324]LogNet: NotifyAcceptingConnection accepted from: 127.0.0.1:62748 [2025.06.26-06.31.44:640][324]LogNet: NotifyAcceptingConnection accepted from: 127.0.0.1:62748

2025-07-03T15:09:10.989656158+08:00 stdout F 07:09:10.983 [main] INFO org.apache.cassandra.config.DatabaseDescriptor - Global memtable on-heap threshold is enabled at 1722MB 2025-07-03T15:09:10.989656158+08:00 stdout F 07:09:10.983 [main] INFO org.apache.cassandra.config.DatabaseDescriptor - Global memtable off-heap threshold is enabled at 1722MB 2025-07-03T15:09:10.989656158+08:00 stdout F Exception (java.lang.NullPointerException) encountered during startup: null 2025-07-03T15:09:10.989689362+08:00 stderr F java.lang.NullPointerException 2025-07-03T15:09:10.989689362+08:00 stderr F at java.nio.file.Files.provider(Files.java:97) 2025-07-03T15:09:10.989689362+08:00 stderr F at java.nio.file.Files.getFileStore(Files.java:1461) 2025-07-03T15:09:10.989689362+08:00 stderr F at org.apache.cassandra.io.util.FileUtils.getFileStore(FileUtils.java:682) 2025-07-03T15:09:10.989689362+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1093) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:493) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:324) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:153) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:137) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:680) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:622) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:786) 2025-07-03T15:09:10.992724804+08:00 stdout F 07:09:10.992 [main] ERROR org.apache.cassandra.service.CassandraDaemon - Exception encountered during startup 2025-07-03T15:09:10.992724804+08:00 stdout F java.lang.NullPointerException: null 2025-07-03T15:09:10.992724804+08:00 stdout F at java.nio.file.Files.provider(Files.java:97) 2025-07-03T15:09:10.992724804+08:00 stdout F at java.nio.file.Files.getFileStore(Files.java:1461) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.getFileStore(FileUtils.java:682) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1093) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:493) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:324) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:153) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:137) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:680) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:622) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:786) 这个怎么解决 启动命令是podman run -d \ --name cassandra \ --network janusgraph-net \ --privileged \ -p 9042:9042 \ -v /opt/janusgraph/conf/cassandra:/etc/cassandra:z \ -v /home/iaas/janusgraph-full-0.6.3/cassandra/lib:/usr/share/cassandra/lib:z \ -e CASSANDRA_CONF=/etc/cassandra \ -e CLASSPATH=/usr/share/cassandra/lib/* \ -e CASSANDRA_AUTHENTICATOR=PasswordAuthenticator \ -e CASSANDRA_USER=cassandra \ -e CASSANDRA_CLUSTER_NAME=JanusGraphCluster \ docker.io/library/cassandra:3.11.14这个

wandb: Currently logged in as: 470749941. Use wandb login --relogin to force relogin wandb: Tracking run with wandb version 0.15.5 wandb: Run data is saved locally in /home/zhangmengjie/PID/Python/ERL-Re2-main/wandb/run-20230721_165552-b5nwvm2m wandb: Run wandb offline to turn off syncing. wandb: Syncing run Steps_200_theta_0.5_eval_1_rs_prob_0.05_frac_p_0.7_our_M_1_0.2_1_5_1.0_64_noise_0.2_Pavn_detach_False_1.0_actorloss_MI_sa_s_0.0_random_K_1_Ant-v2_0.005 wandb: ⭐️ View project at https://wandb.ai/470749941/TSR wandb: 🚀 View run at https://wandb.ai/470749941/TSR/runs/b5nwvm2m /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/gym/envs/registration.py:556: UserWarning: WARN: The environment Ant-v2 is out of date. You should consider upgrading to version v4. f"The environment {id} is out of date. You should consider " Error compiling Cython file: ------------------------------------------------------------ ... See c_warning_callback, which is the C wrapper to the user defined function ''' global py_warning_callback global mju_user_warning py_warning_callback = warn mju_user_warning = c_warning_callback ^ ------------------------------------------------------------ /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx:92:23: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil' Error compiling Cython file: ------------------------------------------------------------ ... See c_warning_callback, which is the C wrapper to the user defined function ''' global py_error_callback global mju_user_error py_error_callback = err_callback mju_user_error = c_error_callback ^ ------------------------------------------------------------ /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx:127:21: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil' Compiling /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx because it changed. [1/1] Cythonizing /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx wandb: Waiting for W&B process to finish... (failed 1). Press Control-C to abort syncing. wandb: Network error (TransientError), entering retry loop. wandb: Network error (TransientError), entering retry loop.

pdf
内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。

最新推荐

recommend-type

Pytorch: 自定义网络层实例

input, weight, bias = ctx.saved_tensors grad_input = grad_weight = grad_bias = None if ctx.needs_input_grad[0]: grad_input = grad_output.mm(weight) if ctx.needs_input_grad[1]: grad_weight = grad...
recommend-type

无线通信基于PSO的STAR-RIS辅助NOMA系统优化:联合功率分配与智能表面参数调优(含详细代码及解释)

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
recommend-type

在自定义数据集上训练yolov3,并封装到ROS中作为一个节点

资源下载链接为: https://pan.quark.cn/s/9ccb85a2be0f 在自定义数据集上训练yolov3,并封装到ROS中作为一个节点(最新、最全版本!打开链接下载即可用!)
recommend-type

Ext4压缩与解压工具:从解包到重新打包全过程

标题和描述中提到的知识点详细说明如下: ### ext4文件系统 ext4(第四扩展文件系统)是Linux操作系统中的一个日志文件系统,它是在ext3基础上发展起来的。ext4提供了一系列改进,包括更大的文件系统和文件大小、更快的性能、更强的可靠性等。ext4文件系统广泛应用于Linux服务器和嵌入式设备中,特别是在Android操作系统中,它通常用于存储系统数据。 ### 解压工具 描述中提到了三个主要工具:make_ext4fs、simg2img和kusering.sh。这些工具主要用于Android设备的系统镜像文件的解压缩和重新打包操作。具体如下: 1. **make_ext4fs** 这是一个Android平台上的命令行工具,用于创建一个新的ext4文件系统镜像文件。这个工具通常用于打包修改过的文件系统或创建一个新的系统分区。其重要参数包括: - `-s`:创建一个sparse(稀疏)文件系统镜像。 - `-l`:设置文件系统的大小限制。 - `-a`:指定默认挂载点。 - `system.img`:输出的镜像文件名称。 - `tmp`:指定要打包的目录。 2. **simg2img** 该工具用于将Android专用的sparse格式镜像文件转换为普通的ext4文件系统镜像文件。这对于解包系统镜像文件和查看其中内容非常有用。其基本用法是: ```bash simg2img system.img system.img.ext4 ``` 这样就可以将一个sparse格式的system.img转换成ext4格式的system.img.ext4,后者能够被挂载到Linux系统中进行查看和修改。 3. **kusering.sh** 这个脚本可能是用于修改用户ID(UID)和组ID(GID)的脚本。在Android系统中,对系统分区进行操作时可能需要特殊的权限设置,而kusering.sh脚本正是用于此目的。但由于描述中没有具体的使用命令,无法给出具体用法。 ### 操作方法 描述中提供了一系列步骤来解压和修改system.img文件,并重新打包。下面详细介绍这些步骤: 1. **解压system.img为ext4格式**: 使用simg2img工具将sparse格式的system.img转换为ext4文件系统格式,命令如下: ```bash simg2img system.img system.img.ext4 ``` 这一步是必要的,因为原始的system.img通常是一个sparse格式,不易于直接修改。 2. **创建挂载目录**: 创建一个临时目录用于挂载ext4文件系统,命令如下: ```bash mkdir tmp ``` tmp目录将作为挂载点,用于将image文件挂载到Linux文件系统中。 3. **挂载ext4文件系统**: 将上一步得到的ext4文件系统挂载到之前创建的tmp目录,命令如下: ```bash sudo mount -t ext4 -o loop system.img.ext4 tmp ``` 使用`-t ext4`指定文件系统类型为ext4,`-o loop`创建一个循环设备,使得普通文件也能像块设备一样被访问。 4. **修改文件系统内容**: 进入tmp目录后,用户可以按照需求对文件系统内的内容进行修改。这一步通常需要root权限。 5. **重新打包文件系统**: 修改完成后,使用make_ext4fs工具将tmp目录重新打包为一个新的sparse格式的system.img文件,命令如下: ```bash sudo make_ext4fs -s -l 239M -a system system.img tmp ``` 这里`-s`表示创建sparse格式的文件系统,`-l 239M`指定文件系统的大小,`-a system`设置默认挂载点,`system.img`是打包后的输出文件名,`tmp`是作为文件系统源的目录。 ### 总结 以上步骤涵盖了如何使用simg2img、make_ext4fs工具进行Android设备的系统镜像的解压、挂载、修改和重新打包操作。需要注意的是,进行这些操作需要相应的Linux环境知识,以及对Android系统文件结构有一定的了解。由于这些操作涉及对系统分区的修改,建议在操作前备份原始的system.img文件,以防万一出现问题能够恢复。同时,由于这些操作可能会影响设备的正常使用,建议仅在允许的范围内进行。
recommend-type

【数据转换的基石】:技术分析,Excel到Oracle建表语句的自动化

# 摘要 本文主要探讨了数据转换项目中的关键步骤和自动化方法。首先,文章概述了数据源的分析与处理,重点在于理解Excel数据结构和进行数据清洗预处理。随后,文章介绍了利用VBA和Python语言实现Excel数据提取的自动化技术。接着,文章转向Oracle数据库建表语句的自动生成,涵盖了数据库基础、制定建表规则和模板,以及脚本编写的自动化过程。第五章整合了数据提取与建表流程,并通过案例实践展示了自动化数据转换项目的应用。
recommend-type

前端vue2 使用高德地图api

<think>好的,我现在需要解决用户的问题:如何在Vue2项目中集成和使用高德地图API。用户希望得到一个示例教程,并且根据提供的引用内容,我需要结合这些资料来构建答案。首先,我需要回顾用户提供的引用内容,看看有哪些关键点可以利用。 引用1、2、3、4、5都是关于Vue集成高德地图的,特别是引用4和5提到了Vue2和Vue3的具体集成步骤。用户问的是Vue2,所以需要重点参考引用4和5中的Vue2相关内容。不过引用5是Vue3的教程,可能部分步骤类似,但需要注意版本差异。 首先,步骤一般包括:注册高德开发者账号、获取API key、在Vue项目中引入高德地图的JS API、创建地图容器、
recommend-type

易语言源码:希冀程序保护专家深入解析

易语言是一种简单易学的编程语言,主要面向中文编程社区,其特色在于使用中文作为编程关键字。标题中提到的“希冀程序保护专家”可能是易语言编写的程序,旨在提供给易语言开发者使用的源码保护工具。 ### 易语言基础知识点 - **易语言的定义与特点:** 易语言是一种汉语编程语言,它的关键词和语法结构使用中文书写,极大降低了编程的学习难度,尤其适合编程初学者和没有英文基础的用户。 - **易语言的开发环境:** 易语言提供了一套集成开发环境(IDE),包括代码编辑器、调试器等,支持快速开发Windows应用程序。 - **易语言的应用范围:** 易语言广泛应用于桌面应用开发,如文本处理、游戏开发、系统管理工具等领域。 ### 程序保护的必要性 - **软件盗版与破解:** 在软件行业中,未经许可的复制和使用是一个普遍的问题。开发者需要采取措施保护其软件不被盗版和非法复制。 - **知识产权保护:** 程序保护是维护知识产权的一种方式,它帮助开发者保护其劳动成果不被他人侵权。 - **商业利益保护:** 软件如果被轻易破解,可能会导致开发者的经济损失。通过有效的程序保护,可以确保软件的合法销售和使用,维护开发者的商业利益。 ### 程序保护技术 - **代码混淆(Obfuscation):** 通过改变代码的结构和变量名来使程序难以阅读和分析,增加逆向工程的难度。 - **加壳(Packers):** 将可执行文件压缩,加密,使得程序在运行时首先执行一个解密或解压缩的过程,增加了程序被非法篡改的难度。 - **注册验证机制:** 通过软件注册码或激活机制,验证用户是否有权使用软件,限制非授权用户的使用。 - **许可证授权管理:** 程序运行时与远程服务器交互验证用户许可证,确保只有合法的用户可以使用软件。 ### 易语言的程序保护方案 - **代码混淆工具:** 易语言提供专门的混淆工具,开发者可以对源码进行混淆处理,提高代码安全性。 - **加密算法:** 易语言支持内置的加密解密函数库,开发者可以利用这些库函数实现加密算法,保护程序不被轻易破解。 - **模块化编程:** 易语言支持模块化开发,可以将核心功能封装在DLL模块中,通过主程序调用,增强保护效果。 - **第三方保护软件:** 如描述中的“希冀程序保护专家”,这样的工具往往集成了多种程序保护技术,如加壳、注册机生成、许可证管理等,提供一站式的服务。 ### 结论 易语言源码“希冀程序保护专家”面向的用户是使用易语言进行软件开发的程序员。这款工具能够帮助他们保护自己的易语言源码和编译后的可执行程序,防止源码被非法窃取,维护个人或公司的权益。通过实现各种程序保护技术,它能够提升软件的安全性,减少潜在的盗版风险,并且能够通过多种方式确保软件的授权使用,维护软件的市场价值。对于易语言开发者而言,这类保护工具是其软件能够获得市场成功的重要保障之一。
recommend-type

【数据迁移流程优化】:一步到位的Excel到Oracle建表语句自动化转换

# 摘要 本文旨在优化数据迁移流程,通过深入分析Excel与Oracle数据库的结构特点和数据处理技术,开发出一套自动化工具来实现高效的数据转换。文章首先概述了数据迁移流程,并对Excel数据结构和提取技术进行了详细分析。接着,介绍了Oracle数据库的基础知识,包括建表语句和数据库设计原则。在此基础上,文章详细描述了自动化转换工具的开发过程,包括
recommend-type

二维视觉缺陷检测技术背景

<think>好的,我需要回答用户关于二维视觉缺陷检测技术的背景知识,包括技术原理和应用背景。首先,我要确保遵循系统级指令,比如使用正确的LaTeX格式,生成相关问题,并添加引用标识。 首先,我得回忆一下用户提供的参考引用内容。引用[1]提到机器视觉检测系统的组成和特点,还有表面缺陷检测的问题和发展趋势。引用[2]则比较了2D和3D检测的优劣,指出2D在颜色和纹理检测上的优势,但在三维缺陷上的不足。 接下来,我需要组织回答的结构。用户要求结构清晰,逐步解决问题,所以应该分点说明技术原理和应用背景。技术原理部分需要包括图像获取、预处理、特征提取、分类识别等步骤。应用背景则需要说明传统方法的不
recommend-type

Orca(msi编辑工具) 4.5.6 中文版发布:微软官方数据库编辑器

Orca工具是由微软官方发布的一款Windows Installer数据库表编辑器软件,适用于编辑各类与Windows Installer相关的文件。Windows Installer是一个用于安装、维护、以及卸载软件的应用程序接口。它首次被引入是在Windows 2000版本中,以及后续的Windows操作系统中作为标准的安装技术。 ### Orca编辑器功能详述 Orca可以用来编辑以下类型的文件: 1. **.msi文件**:这是Windows Installer的核心文件,包含了软件安装包的全部信息,例如安装所需的资源、文件、注册表项以及安装和卸载过程中的操作指令。Orca能够对这些信息进行查看和修改,从而实现软件的定制化安装。 2. **.msm文件**:这是合并模块文件,主要用于将一组共同的组件打包,以便多个安装程序可以共享使用。Orca编辑器也可以打开.msm文件,并允许用户查看和编辑其中的信息。 3. **.msp文件**:这是Windows Installer补丁文件,用于更新现有的Windows Installer安装程序,它通常包含对现有.msi安装包所做的变更。Orca编辑器同样可以编辑.msp文件,以便创建或修改补丁。 4. **.cub文件**:这是内部一致性计算程序文件,通常用于执行文件内容的校验。Orca编辑器提供了一种方法来查看和分析这些文件。 5. **.pcp文件**:这是补丁创建属性文件,它存储了创建.msp补丁文件时所用的参数和属性设置。Orca编辑器支持对这些属性文件的编辑。 ### Orca编辑器的应用场景 - **安装程序定制**:通过Orca编辑器,IT专业人员可以修改安装包的默认安装路径、添加或移除组件、添加或修改注册表项和快捷方式等。 - **本地化修改**:对于需要本地化的安装程序,Orca编辑器可以用来更改安装程序的语言资源,使安装界面支持多种语言。 - **错误修复和补丁制作**:当软件安装包出现问题或需要添加新特性时,可以使用Orca编辑器进行必要的修改,并生成补丁文件。 - **自动化脚本开发**:Orca编辑器允许对.msi文件进行自动化操作,例如,可以编写脚本自动应用一些更改,减少人工干预。 ### 使用Orca编辑器的注意事项 - **备份原文件**:在使用Orca编辑.msi、.msm、.msp等文件之前,务必备份原始文件,因为编辑过程中的错误可能会导致安装程序损坏。 - **了解Windows Installer**:使用Orca编辑器之前,需要对Windows Installer的工作机制有基本的了解,包括对它所使用的各种表和字段的含义有清楚的认识。 - **版本兼容性**:Orca编辑器是与特定版本的Windows Installer一起工作,因此在不同版本的操作系统上,其功能表现可能会有差异。 ### 总结 Orca编辑器是一个强大的工具,尤其适合于对安装包进行高级定制的场景。它提供了一个可视化的界面,让开发者能够直接编辑.msi等文件中的数据表,实现复杂安装任务的配置。同时,由于它与Windows Installer紧密结合,使用它时也需要对Windows Installer的原理有足够的认识。通过Orca编辑器,可以有效地制作出更加符合需求的安装包和补丁,极大地增强了软件部署的灵活性和适应性。