Продолжение прерванного сеанса `wget`?

В Тесте :

pax -w's|.*/||' dir[1-3]/* | xz > file.tar.xz

архивирует файлы без компонентов пути.

Обратите внимание, что в директории [1-3] / * скрытые файлы будут пропущены. Для символических ссылок -s также перезапишет цели символических ссылок.

Если вам нужны только обычные файлы и при условии, что ни одно из имен ваших файлов не содержит символов новой строки, вы можете сделать:

find dir[1-3] -type f | pax -ws'|.*/||' | xz > file.tar.xz

Если имена файлов могут содержать символы новой строки, в некоторых системах, вы можете написать:

find dir[1-3] -type f -print0 | pax -w0s'|.*/||' | xz > file.tar.xz

В то время как find и pax являются стандартными командами, -print0 и -0 не являются YMMV.

1
28.08.2015, 16:47
1 ответ

Wget можно использовать по-разному, но я предполагаю, что вы используете его для эмуляции браузера, выполняющего HTTP-запросы на основе содержимого PHP.

Невозможно заставить wget возобновить прерванный сеанс. Веб-сервер, с которым взаимодействует wget, не имеет состояния, поэтому нет ничего, что могло бы точно отслеживать, что происходило в прерванном сеансе. Все, что вы можете сделать, это сделать запрос еще раз, что, конечно, не поможет вам, поскольку это будет новый сеанс, и он никогда не может быть таким же, как раньше.

Когда ваша сессия wget была прервана, эта сессия перестала существовать. Динамически сгенерированный контент зависел от этого конкретного сеанса и был создан только для обслуживания этого сеанса. Когда этот сеанс закончился, его динамическое содержимое фактически перестало существовать. Невозможно каким-то образом вернуться и возобновить несуществующий сеанс или взаимодействовать с несуществующим динамическим контентом, который существовал только для обслуживания этого сеанса.

Помните, что веб-серверы не имеют состояния. Вы делаете запрос, и тут же получаете единственный ответ, который когда-либо будет отправлен на этот конкретный запрос. Более сложные вещи, такие как сеансы и динамический контент, подключаются к этим запросам без сохранения состояния, передавая в ваш браузер временные идентификаторы сеансов и / или токены.Затем, когда приходит ваш следующий запрос, приложение или сценарий PHP, создающий динамическое содержимое, проверяет этот идентификатор сеанса / токен и отвечает вашему браузеру логически подходящим способом.

Даже если бы вы могли каким-то образом воспроизвести тот же идентификатор сеанса и токен, которые были в вашем браузере раньше (не тратьте зря время на попытки), вероятность того, что идентификатор сеанса / токен станет недействительным на стороне сервера в течение нескольких секунд, составляет 99,99999%. в любом случае с момента вашего последнего запроса.

Это выходит за рамки вашего вопроса, но в зависимости от точного кода / сценария, с которым ваш браузер взаимодействовал на этом сервере, может быть возможно передать поддельный идентификатор сеанса / токены, но в целом это невозможно восстановить прерванный сеанс. В вашем случае это вообще невозможно, так как вам пришлось бы попытаться захватить этот идентификатор сеанса / токен до потери сеанса, чтобы попытаться воспроизвести его.

0
28.01.2020, 01:35

Теги

Похожие вопросы