Как скопировать чужие папки с public.me.com с помощью wget-подобного инструмента?

Как скопировать папку из http://public.me.com/ (службы, связанной с iDisk или MobileMe ) в мою локальную файловую систему с помощью инструмента Unix (например, wget , неинтерактивный инструмент командной строки )?

Проблема в том, что веб-интерфейс на самом деле является сложной вещью на основе Javascript, а не просто разоблачением файлов. (Даже w3m не может просматривать, например, https://public.me.com/rudchenko .)

Моя цель – время от времени обновлять локальную копию, а также загружать файлы в сценарий, чтобы другие люди могли запускать сценарий и загружать файлы.

Мне понравится wget- like ( rsync- like, git pull- like) инструмент или комбинация установки сетевой файловой системы через FUSE, а затем использование стандартных команд Unix для копирования каталогов.

Я читал в статьях Википедии (что я упоминал выше), что Apple предоставляет доступ к этим службам через WebDAV , а также читал о трупном , wget- подобном клиенте WebDAV, но я не могу понять, какой адрес я следует использовать для доступа к папкам по адресу http://public.me.com/ только для чтения (анонимно).

Возможно, комментарий Gilles (который не используется в настоящее время WebDAV) верен, но по-прежнему есть некоторые вещи WebDAV за сценой: URL-адрес, переданный браузеру для загрузки архива с каталогом (после нажатия «загрузка выбранных файлов» "в верхней части веб-интерфейса) выглядит следующим образом:

https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download 

Обратите внимание, что в нем упоминается «WebDAV». (Если вам интересно, я попытался повторно использовать этот URL в качестве аргумента для wget , но это не удалось:

 $ LC_ALL=C wget 'https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download' --2011-11-21 01:21:48-- https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download Resolving public.me.com... 23.32.106.105 Connecting to public.me.com|23.32.106.105|:443... connected. HTTP request sent, awaiting response... 404 Not Found 2011-11-21 01:21:48 ERROR 404: Not Found. $ 

)

(Я использую систему GNU / Linux.)

  • wget-файлы по шаблону только из указанных каталогов рекурсивно
  • wget-файл, протоколирование вывода и отображение вывода в командной строке
  • Использование wget, как загрузить в определенное место, без создания папок и всегда перезаписывать исходные файлы
  • wget на лету, чтобы извлечь определенную информацию из файла, не загружая весь файл
  • Почему wget сохраняет рекурсивные данные, несмотря на -l5?
  • Загрузите рекурсивно с помощью wget
  • Проверка сертификата wget -c веб-сайта
  • Как отобразить все URL-адреса в цепочке перенаправления?
  • 2 Solutions collect form web for “Как скопировать чужие папки с public.me.com с помощью wget-подобного инструмента?”

    На этом сервере явно выполняется частичная или сломанная реализация WebDAV. Обратите внимание, что вам нужно подключиться к URL-адресу, например https://public.me.com/ix/rudchenko , а не к обычному URL https://public.me.com/rudchenko . Я попробовал несколько клиентов:

    • С обычным загрузчиком HTTP, таким как wget или curl, я мог бы скачать файл, зная его имя (например, wget https://public.me.com/ix/rudchenko/directory/filename ), но не смог получить список каталогов ,
    • FuseDAV , который был бы моим первым выбором, не сможет справиться с некоторыми недостающими командами. По-видимому, ему удается перечислить корневой каталог (видимый в выходе из fusedav -D ), но в итоге запускает некоторый запрос, который возвращает «PROPFIND failed: 404 Not Found» и блокируется.
    • Nd не хватает команды списка.
    • Cadaver хорошо работает, но не имеет рекурсивной команды поиска. Вы можете использовать его для получения списков, а затем извлекать отдельные файлы, как указано выше.

      Это не идеально, и в этом случае есть проблема: mget не может обрабатывать args с помощью подстановочных знаков, которые расширяются до имен файлов с пробелами .

    • Davfs2 работает очень хорошо. Я смогу смонтировать эту папку и скопировать файлы с нее. Единственным недостатком является то, что это не файловая система FUSE, вам нужен root для ее монтирования или запись в /etc/fstab .
    • В этом случае файлы wdfs на основе FUSE -1.4.2- alt0.M51.1 работали очень хорошо, не требуя root (только разрешения для /dev/fuse ).

       mkdir viewRemote wdfs https://public.me.com/ix/rudchenko/ viewRemote rsync -a viewRemote/SEM*TO\ PRINT* ./ fusermount -u viewRemote rmdir viewRemote 

    (Конечно, простой cp вместо rsync хорошо работал бы в этом примере: rsync был выбран просто для дополнительной диагностики разницы, когда мы обновили копию.)

    (Помимо wdfs, я пробовал эти команды в системе сжатия Debian. Ваш пробег может отличаться.)

    Существуют также специальные скрипты и инструмент ( wget-warc ) для загрузки содержимого https://public.me.com/ папок пользователя – https://github.com/ArchiveTeam/mobileme-grab/blob/master /dld-me-com.sh (и см. содержащее репо). (Найдено через http://archiveteam.org/index.php?title=MobileMe#How_to_help_archiving .)

    Внутренне сценарий, похоже, составляет запросы WebDAV и использует затем ответы, например:

     # step 1: download the list of files if [[ "$domain" =~ "public.me.com" ]] then # public.me.com has real WebDAV # PROPFIND with Depth: infinity lists all files echo -n " - Discovering urls (XML)..." curl "https://public.me.com/ix/${username}/" \ --silent \ --request PROPFIND \ --header "Content-Type: text/xml; charset=\"utf-8\"" \ --header "Depth: infinity" \ --data '<?xml version="1.0" encoding="utf-8"?><DAV:propfind xmlns:DAV="DAV:"><DAV:allprop/></DAV:propfind>' \ --user-agent "${USER_AGENT}" \ > "$userdir/webdav-feed.xml" result=$? if [ $result -ne 0 ] then echo " ERROR ($result)." exit 1 fi echo " done." # grep for href, strip <D:href> and prepend https://public.me.com grep -o -E "<D:href>[^<]+" "$userdir/webdav-feed.xml" | cut -c 9- | awk '/[^\/]$/ { print "https://public.me.com" $1 }' > "$userdir/urls.txt" count=$( cat "$userdir/urls.txt" | wc -l ) elif 

    Да, они также используют « https://public.me.com/ix/ $ {username} /», обратите внимание на « / ix / » infix в URL! Не обычный URL-адрес – то же самое, что и Жиль, обнаруженный в его ответе .

    Linux и Unix - лучшая ОС в мире.