Как стать автором
Обновить

Комментарии 16

>>Кстати, у предыдущей версии скрипта были определенные проблемы с именами папок и файлов, содержащими пробелы. Чтобы избежать этого, сделаем вот так:

Разве нельзя в Вашем скрипте экранировать путь к файлу? Или там какие-то ограничения Automator\AppleScript? Вы можете вместо $1 использовать $* или ещё как-нибудь соединить все аргументы к скрипту в самом скрипте, или же там, где вы вызываете этот bash-скрипт, обернуть аргумент в кавычки и всё ;-)
Я пробовал, и у меня что-то не получилось. Как-то странно applescript передает параметры в bash. Надо будет еще раз сегодня попробовать, осталось найти тот файл, где воспроизводится глюк.
Пробуйте, и да пребудут с Вами двойные кавычки, обратный слэш, logger, echo $stuff >> debug.log и logger ;-) Я сам недавно дебажил скрипт с похожей проблемой, поэтому и сочувствую.
А, вот в чем проблема. Applescript, возвращая posix-путь не экранирует пробелы и специмволы обратным слешем. Тоесть так и возвращает: /Users/vvzvlad/Documents/REVIEWS/технотех/7 металлорезист/001.jpg
Естественно, curl останавливается на пробеле.
Тогда нужно как-то добиться того, чтобы в команде curl были двойные кавычки вокруг $1.
Ну или это:
stackoverflow.com/questions/9745611/curl-file-upload-with-semicolons-in-filename
Тогда будет как-то так, если принять во внимание использование $*:

cat "$*"| curl --cookie «habrastorage_sid= fs5csqksk0hdm5mq3o91cmdm97» --form «files[]=@- --header „X-Requested-With: XMLHttpRequest“ --header „Referer: habrastorage.org/“ --request POST habrastorage.org/main/upload
#Прошу прощения за нерабочий тег code =)

Да, вот так заработало:
SID=$(cat $HOME/.habrastorage) cat "$*" | curl --cookie "habrastorage_sid=$SID" --form files[]=@- --header "X-Requested-With: XMLHttpRequest" --header "Referer: http://habrastorage.org/" --request POST http://habrastorage.org/main/upload | json_pp | grep url | awk -F '"' '{print $4}'

Осталось что-то решить с кукой.
Ну тут просто, вон, опять ответ подсказывают =)
stackoverflow.com/questions/10126734/ubuntu-chrome-how-to-read-a-cookie-from-a-python-script
Осталось немного перепилить под себя — выкинуть ненужное, подправить SQL-запрос и подставить нужные значения, захардкодить всё в одном скрипте, чтобы он просто выводил в stdout значение куки — и всё, можете выходить в Apple Store ;-)
Так не получится.
1. Куки в Chrome хранятся в зашифрованными.
2. Получить куку можно прямо из скрипта (вариант sledopit)
Хм, а вот эта статья говорит немного по-другому =(
thehackernews.com/2014/01/Chrome-encrypt-web-cookies-tool.html

Я решил не цитировать — я просто не смогу процитировать так, чтобы было читаемо. Однако там говорится, что такая фишка хоть и существует, но только в Chromium&Chrome OS, плюс куки расшифровываются, когда логинишься своим пользователем на компе.
Простой тест:
sqlite3 ~/.config/chromium/Default/Cookies "select encrypted_value from cookies where name=\"habrastorage_sid\" and host_key=\"habrastorage.org\";"

Если в выводе будет строка, начинающаяся с v10 у вас куки шифруются.

README
os_crypt_posix.cc
Ага, но у автора Google Chrome, а не Chromium =) И ещё:

// We currently «obfuscate» by encrypting and decrypting with hard-coded
// password. We need to improve this password situation by moving a secure
// password into a system-level key store.
// crbug.com/25404 and crbug.com/49115
std::string password = «peanuts»;

Конечно, хорошо, что хоть что-то есть… Но всё же =)
В Google Chrome ровно то же самое.

Cookie управляются Печенюшным монстром (и это правда cookie_monster.cc). Очевидно, расшифровываются они после того как извлекутся из базы данных.
Детали работы можно найти в коде (если есть желание).
Для особо ленивых пользователей firefox'a можно пойти дальше и брать куки прямо из браузера и копировать линк прям в буфер обмена:
habra_upload() {
     cookie=$(echo 'select value from moz_cookies where host="habrastorage.org";'| sqlite3 ~/.mozilla/firefox/0000000.default/cookies.sqlite)
     curl -s --cookie "habrastorage_sid=$cookie" --form "files[]=@$1" --header "X-Requested-With: XMLHttpRequest" --header "Referer: http://habrastorage.org/" --request POST http://habrastorage.org/main/      upload | egrep -o 'url[^,]*' | sed 's/"$//;s/.*"//;s/\\//g;s=^=http:=' | xclip
}
Запихнуть в .bashrc и пользоваться так:
habra_upload /path/to/file
Файлы с пробелами и странными символами у меня работали.

С другими браузерами так, возможно, тоже можно, но я ими не пользуюсь.
Можно, конечно, пойти ещё дальше и авторизовываться с помощью curl, но я как-то не привык хранить пароли в .bashrc или явно указывать в нём способ, как получить откуда-то пароль.
Сейчас не работает при попытке залить на http://habrastorage.org. По https работает.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории