Что: 2ceefeb3cb19e64f869660906306d1df9d72edfd Когда: 2021-10-13 22:02:09+03:00 ------------------------------------------------------------------------ Темы: web ------------------------------------------------------------------------ tofuproxy теперь ещё и WARC броузер http://www.tofuproxy.stargrave.org/WARCs.html Ещё одна давняя многолетняя хотелка воплотилась в жизнь! tofuproxy теперь ещё поддерживает загрузку WARC файлов. Идея и формат WARC-ов мне нравятся, особенно учитывая что их даже GNU Wget умеет создавать. Но вот смотреть их -- боль. Потому что почти весь инструментарий написан на Python (ну ещё на Java, но в её сторону не смотрю, ибо тёмный это для меня мир) и паршивого качества, который ещё и не поставить (587711a01f7226bc45fa1a59177e5dccb3f61310). Раз tofuproxy может выступать в роли и HTTPS сервера/прокси, то и никаких проблем с ссылками на HTTPS ресурсы. Не нужно париться с переконвертацией ссылок в документах, чтобы броузер долбился по HTTP и WARC-capable прокси сервер мог бы нормально отвечать. Посмотрел на несколько WARC библиотек на Go, пару даже использовал, но в итоге написал полностью свою реализацию по чтению этих WARC-ов. Некоторые реализации отмечаю потому что они полностью считывают хотя бы одну запись в память -- если это WARC coursera.org, то в одной записи легко может содержаться многосотмегабайтное видео. Не гоже. Некоторые отмёл просто потому что не нравится как написаны, плохой код, где автор не всё до конца в Go понимает (создавалось такое впечатление). А некоторые наоборот слишком монструозны. Ну и главное: не все поддерживают WARC-и в которых записи разделены на сегменты: часть ответа может быть в одном WARC, а часть уже в другом. И не во всех можно узнать хоть какой-нибудь offset по которому можно было бы быстро прыгнуть на нужную запись в файле. Вот и родилась собственная реализация. Которая поддерживает и .gz/.zst сжатые файлы, но без возможности перемещаться по потокам этого gzip-а. Чтобы достать запись из WARC-а, придётся с самого начала его декомпрессировать. Поэтому лучше конечно иметь голый .warc, пускай и на сжатом ZFS dataset-е. Но возможно и добавлю возможность перемещаться оптимальнее. Через FIFO файлы можно указывать какие WARC-и надо загрузить. Можно удалить. Можно зайти на http://warc/ и посмотреть список всех известных URL-ов загруженных из них. Суть работы тривиальна: просто ищем по URL-у нет ли такого в WARC-ах и, если нашли, то отдавать ответ из WARC-а. Вполне себе работает отлично на практике. Конечно же можно индексы, после парсинга WARC-ов, сохранить на диск, повторно их уже быстро загружая сразу в память. Думал приделать поддержку CDX индексов (https://archive.org/web/researcher/cdx_legend.php), но в них нельзя выразить знание о сегментированных записях. По идее не проблема, но такой индекс уже не универсален, поэтому я просто сбрасываю в gob формате. ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20tofuproxy%20%D1%82%D0%B5%D0%BF%D0%B5%D1%80%D1%8C%20%D0%B5%D1%89%D1%91%20%D0%B8%20WARC%20%D0%B1%D1%80%D0%BE%D1%83%D0%B7%D0%B5%D1%80%20%282ceefeb3cb19e64f869660906306d1df9d72edfd%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0