Проверка HTTP ответа сервера
Для любого СЕОшника просто необходима эта программа - по списку url она скачивает все из них, проверяет коды HTTP ответов, быстро и просто показывает размер страниц, кодировки, содержимое тэгов и некоторую другую служебную информацию о страницах.
Используется библиотека (Q)GumboParser для парсинга HTML5 (c) Google
Для загрузки допустимы как текстовые файлы со списком url типа одна строка - один урл, буффер обмена аналогичного формата, а так же xml файлы формата sitemap как просто список файлов, так и "список списков". Выгрузка осуществляется как в файлы tsv (с раздилителем табуляцией), так и в буффер обмена.
Так же имеется встроенный мини-сканнер сайта. Пока не оттестированный и без возможности прерывания/ограничения скана - будте внимательны на больших сайтах! В окне результата будут отмечены url отдавшие тип контента text/html, и не отмечены другие (например application/*). Добавить в список для сканирования можно только отмеченные - ну или все.
По умолчанию используется 3 потока, при необходимости можно поправить, #define HTTP_MAX_THREADS 3 в mainwindow.h
Но будьте внимательны, можно положить сервер.
В результирующей форме дубли тэгов будут выделены цветом. Проверка дублей - только по соответствующей колонке, то есть h1 по h1, но не по title.
Для запуска бинарников под Windows (ниже) может потребоваться MSVC Runtime 2017 x64 и OpenSSL Win64
Пример сборки (необходим пакет QT5 или QT6):
cd HTTPCodeTester
git submodule update --init --recursive
qmake (или qmake-qt5)
make
При сборке под QT версии 6 и выше потребуется патч двух файлов qgumbonode.h и qgumbonode.cpp внешней библиотеки QGumboNode
Обновление до актуальной текущей версии из исходников:
make
Загрузки
Патч для QGumboParser (Qt 6)
diff -urN a/QGumboParser/qgumbodocument.cpp b/QGumboParser/qgumbodocument.cpp
--- a/QGumboParser/qgumbodocument.cpp
+++ b/QGumboParser/qgumbodocument.cpp
@@ -2,2 +2,3 @@
#include <QTextCodec>
+#include <QStringList>
#include "qgumbonode.h"
diff -urN a/QGumboParser/qgumbonode.h b/QGumboParser/qgumbonode.h
--- a/QGumboParser/qgumbonode.h
+++ b/QGumboParser/qgumbonode.h
@@ -5,2 +5,3 @@
#include <QObject>
+#include <QStringList>
#include <QVector>
@@ -11,3 +12,3 @@
-class QStringList;
+// class QStringList;
class QGumboNode;
diff -urN a/QGumboParser/qgumbonode.cpp b/QGumboParser/qgumbonode.cpp
--- a/QGumboParser/qgumbonode.cpp
+++ b/QGumboParser/qgumbonode.cpp
@@ -4,2 +4,3 @@
#include <QDebug>
+#include <QStringList>
#include "qgumbodocument.h"
@@ -120,9 +121,3 @@
-#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
- const QVector<QStringRef> parts =
- value.splitRef(QChar(' '), QString::SkipEmptyParts, Qt::CaseInsensitive);
-#else
- const QVector<QStringRef> parts =
- value.splitRef(QChar(' '), Qt::SkipEmptyParts, Qt::CaseInsensitive);
-#endif
+ auto parts = value.tokenize(QChar(' '));
- for (const QStringRef& part: parts) {
+ for (const auto& part: parts) {
if (part.compare(name, Qt::CaseInsensitive) == 0) {
