2010-11-02 2 views
23

Я пытаюсь загрузить Xcode с сайта Apple Developer, используя только wget или curl. Я думаю, что я успешно храню файл cookie, который мне нужен для загрузки файла .dmg, но я не совсем уверен.Загрузка Xcode с wget или curl

Когда я запускаю эту команду:

wget \ 
    --post-data="theAccountName=USERNAME&theAccountPW=PASSWORD" \ 
    --cookies=on \ 
    --keep-session-cookies \ 
    --save-cookies=cookies.txt \   
    -O - \ 
    https://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.1__final/xcode_3.2.4_and_ios_sdk_4.1.dmg > /dev/null 

файл с именем cookies.txt создается и содержит что-то вроде этого:

developer.apple.com FALSE/FALSE 0 XXXXXXXXXXXXXXXX XXXXXXXXXXXX 
developer.apple.com FALSE/FALSE 0 developer.sessionToken 

Я не совсем уверен, но я думаю, что должно быть больше к нему, чем это (в частности, буквенно-цифровая строка после sessionToken).

Когда я пытаюсь сделать то же самое с завитком с помощью этого:

curl \ 
    -d "theAccountName=USERNAME&theAccountPW=PASSWORD" \ 
    -c xcode-cookie \ 
    -A "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" \ 
    https://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.1__final/xcode_3.2.4_and_ios_sdk_4.1.dmg 

я получаю файл с именем xcode-cookie, который содержит ту же информацию, что и cookies.txt файла Wget дает мне, за исключением того, что линии перепутаны.

Затем я попытался загрузить файл .dmg.

Использование Wget:

wget \ 
    --cookies=on \ 
    --load-cookies=cookies.txt \ 
    --keep-session-cookies \ 
    http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.1__final/xcode_3.2.4_and_ios_sdk_4.1.dmg 

Это дает мне файл с именем login?appIdKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&path=%2F%2Fios%2Fdownload.action?path=%2Fios%2Fios_sdk_4.1__final%2Fxcode_3.2.4_and_ios_sdk_4.1.dmg , который просто HTML-страницу, содержащую форму входа для сайта разработчика.

Использование локон:

curl \ 
    -b xcode-cookie \ 
    -c xcode-cookie \ 
    -O -v \ 
    -A "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" \ 
    https://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.1__final/xcode_3.2.4_and_ios_sdk_4.1.dmg 

который печатает в основном то же самое, как Wget (минус HTML).

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

Должно быть, я делаю что-то неправильно, если Apple ничего не изменила с 10 октября because this guy seems to be to do something right.

Заранее благодарен!

ответ

28

для Chrome,

  1. Установите cookies.txt Chrome extension
  2. Войти на сайт разработчиков компании Apple и получить URL для загрузки расширения cookies.txt
  3. Run и загрузить файл cookies.txt
  4. Из каталога загрузки файлов cookie.txt загрузите файлы cookie в wget и начните возобновление загрузки. Например, чтобы загрузить Xcode_7.dmg, вы должны запускать:

    Wget --load-печенье = Cookies.txt -c http://adcdownload.apple.com/Developer_Tools/Xcode_7/Xcode_7.dmg

+0

Спасибо, petert! Спасет меня сама по себе. – Joe

+0

Yeh, работает с удовольствием - теперь его легко установить за одну ночь, используя cron. – petert

9

Я только что спустился по той же дороге после неудачного повторного загрузки последней версии Xcode непосредственно на машину Mac dev. Я также не мог заставить Дэниела работать так, как написано.

Это то, что сделал для меня работа:

  1. Используется Firefox, чтобы войти в центре разработчиков IOS

  2. Используется Cookie Exporter 1.5, чтобы сохранить куки в текстовый файл, скажем «cookies.txt "

  3. Файлы cookie FTP.TXT в перевалочный сервер шахты, которая имеет хороший жира трубы на Интернет

  4. Используется Wget от промежуточного сервера для загрузки файла (около 5 минут)

  5. Б FTP для передачи DMG файл обратно мой DEV машина (около 2 часов)

Вот команда Wget линия:

wget --cookies=on --load-cookies=cookies.txt --keep-session-cookies --save-cookies=cookies.txt http://adcdownload.apple.com/ios/ios_sdk_4.1__final/xcode_3.2.4_and_ios_sdk_4.1.dmg 

хитрость здесь НЕ использовать загрузку лин k на странице, но для начала загрузки воспользуйтесь контекстным меню в списке загрузки «Копировать ссылку на скачивание».

+0

Это по какой-то причине, похоже, не работает, но это все еще помогло мне! – Joe

+0

HTTP-запрос отправлен, ожидающий ответа ... 403 Запрещено 11:05:27 ОШИБКА 403: Запрещено. – nishantcm

+0

Просто для регистрации ваш трюк все еще работает. Я просто добавил «- продолжить», чтобы wget, поэтому, если что-то пойдет не так, вы можете продолжить загрузку в момент сбоя. –

1

Так что я, кажется, понял ответ на свой вопрос. Вот как вы можете скачать Xcode с помощью curl.

Во-первых, это запустить:

curl \ 
-L -s -k \ 
--cookie-jar cookies \ 
-A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5" \ 
https://developer.apple.com/devcenter/ios/login.action \ 
-o login.html 

Открыть login.html файл, который создается и искать эти 2 вещи:

  • атрибут формы входа action. Он должен быть на линии 54.
  • Поле input с именем wosid. Это должно быть на/вокруг линии 129.

Copy значение атрибута action, а также значение атрибута поля ввода value. Для этого вам понадобятся следующие шаги.

Вот следующий локон команда:

curl \ 
-s -k --cookie-jar cookies --cookie cookies \ 
-A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5" \ 
-e ";auto" "https://daw.apple.com{ACTION}?theAccountName={USERNAME}&theAccountPW={PASSWORD}&theAuxValue=&wosid={WOSID}&1.Continue.x=0&1.Continue.y=0" \ 
> /dev/null 
  • Заменить {ACTION} со значением действия вы сохранили
  • Заменить {USERNAME} и {PASSWORD} с учетными данными компании Apple Dev Center
  • Заменить {WOSID} со значением wosid вы сохранено
  • Выполнить команду

Теперь вы должны иметь файл cookie, который позволит вам загрузить файл .dmg. Если вы еще не заметили, cookie хранится в файле с именем cookies.

Теперь просто запустить эту последнюю завиток команды и Xcode изображение должно начать загрузку:

curl \ 
-L --cookie-jar cookies --cookie cookies \ 
-A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5" \ 
-O https://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.1__final/xcode_3.2.4_and_ios_sdk_4.1.dmg 

Я попробовал это на 2 разных машинах и работаю на обоихах.

+0

Я пробовал это, и он запускается и останавливается на скорости 4kb после выполнения других инструкций ... curl -L - куки-куки-куки -cookie cookie -A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv: 1.9.1) Gecko/20090624 Firefox/3.5 "-O http://adcdownload.apple.com/Developer_Tools/xcode_4.0.2_and_ios_sdk_4.3/xcode_4.0.2_and_ios_sdk_4.3.dmg –

1

Вот немного Баш скрипт WGET Xcode:

#!/bin/bash 

export ID=YourAppleID 
export PW=YourPW 

[ -f cookies ] && rm cookies && touch cookies 

2>Header \ 
wget \ 
-S \ 
-O R1 \ 
http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.2__final/xcode_3.2.5_and_ios_sdk_4.2_final.dmg 

tac Header | grep Location 
LOCATION=$(grep Location Header | sed -E 's/^ *Location: ([^/]+:\/\/[^/]+)\/.*$/\1/') 
[ -z "$LOCATION" ] && { echo "Bad day for LOCATION...";exit;} || echo "LOCATION=$LOCATION" 
rm Header 

ACTION=$(grep action R1 | sed 's/^.*action="//;s/".*$//') 
[ -z "$ACTION" ] && { echo "Bad day for ACTION...";exit;} || echo "ACTION=$ACTION" 

POST=$(grep input R1 | sed 's/<input/\ 
<input/g' | grep input | sed 's/^.*name="//' | sed 's/".*value="/=/;s/".*$//' | sed '/=/!s/$/=/' | sed '/theAccountName/s/$/'$ID'/;/theAccountPW/s/$/'$PW'/' | sed '/=$/d' | sed -n '1h;1!H;${x;s/[[:space:]]/\&/g;p;}' | sed 's/$/\&1.Continue.x=0\&1.Continue.y=0/') 
[ -z "$POST" ] && { echo "Bad day for POST...";exit;} || echo "POST=$POST" 

2>Header \ 
wget \ 
-S \ 
--save-cookies cookies \ 
--keep-session-cookies \ 
-O R2 \ 
--post-data="$POST" \ 
$LOCATION/$ACTION 

URL=$(grep -i REFRESH R2 | sed 's/^.*URL=//;s/".*$//') 
[ -z "$URL" ] && { echo "Bad day for URL...";exit;} || echo "URL=$URL" 

wget \ 
-S \ 
--load-cookies cookies \ 
$URL & 

sleep 1; rm R1 R2 Header cookies 

Комментарии такие же, как для Джо Solution - Thnx Джо; о) Хорошая идея заключается в том, чтобы начать анализ трафика от загрузки URL в Xcode ,

+1

Замена uname и pwd и запуск этого скрипта дает мне : ./wgetapple.sh: строка 14: tac: команда не найдена Плохой день для LOCATION ... –

+0

Ok 'tac' не входит в стандартные команды, установленные в Mac OS X, и я забыл об этом при публикации сценария. Просто добавьте 'tac() {sed -ne '1h; 1! {G; x;}; $ {x; p;}';}' после того, как два экспорта в начале скрипта должны исправить эту ошибку. используя macport, вы также можете установить 'gtac' и заменить' tac' на 'gtac': o) – denis

14

Вот сценарий, который использует завиток вместо wget, поэтому он будет работать на складе Mac. Все, что вам нужно установить, это путь к файлу DMX xcode. Сценарий спросит вас о вашем имени пользователя и пароле, а будет определять значения ACTION и WOSID для вас.

#!/bin/sh 

# Change this line to the URI path of the xcode DMG file. 
XCODE_PATH="/ios/ios_sdk_4.2__final/xcode_3.2.5_and_ios_sdk_4.2_final.dmg" 

echo "Enter your Apple Dev Center username." 
read -p "> " USERNAME 
echo "Enter your Apple Dev Center password." 
read -p "> " PASSWORD 

curl \ 
     -L -s -k \ 
     --cookie-jar cookies \ 
     -A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5" \ 
     https://developer.apple.com/devcenter/ios/login.action \ 
     -o login.html 

ACTION=$(sed -n 's/.*action="\(.*\)".*/\1/p' login.html) 
WOSID=$(sed -n 's/.*wosid" value="\(.*\)".*/\1/p' login.html) 
echo "action=${ACTION}" 
echo "wosid=${WOSID}" 

curl \ 
     -s -k --cookie-jar cookies --cookie cookies \ 
     -A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5" \ 
     -e ";auto" "https://daw.apple.com${ACTION}?theAccountName=${USERNAME}&theAccountPW=${PASSWORD}&theAuxValue=&wosid=${WOSID}&1.Continue.x=0&1.Continue.y=0" \ 
     > /dev/null 

curl \ 
     -L --cookie-jar cookies --cookie cookies \ 
     -A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5" \ 
     -O https://developer.apple.com/ios/download.action?path=${XCODE_PATH} 

rm login.html 
rm cookies 
+1

Этот скрипт больше не работает. Возможно, URL-адреса изменились? – thiagoveloso

3

не оптимальна, но работает для меня:

Если вы знать прямую ссылку для скачивания (например, вы начали загрузку), то вы можете войти в на портале для разработчиков и запустить следующий JS в консоли:

copy('wget -c http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_5_za4gu6/xcode_6_beta_5.dmg --header="Cookie:' + document.cookie + '"') 

Это скопирует Wget команды в буфере обмена со всеми необходимым файлы cookie для работы wget. Вы можете перезапустить эту команду в любое время, чтобы продолжить.

17

Может быть, это самый простой способ использовать завиток:

  • открытый Google Chrome.app;
  • сайт переходов developer.apple.com;
  • пресс CMD + SHIFT + J или щелкните верхний правый Menu значок ->Tools ->Developer Tools;
  • нажмите Network панель;
  • сейчас нажмите Xcode ссылку для скачивания на apple.com;
  • вы увидите одну или несколько записей запроса в панели Network;
  • Щелкните правой кнопкой мыши самую последнюю запись, затем нажмите Copy as cURL;

Теперь вы получили завиток команду для этой загрузки связь с печеньем и другими HTTP-requeset полей, просто вставьте в свой терминал и добавить -o xxx.dmg в конце.

+2

Добавление '-L -C -' в конце (после предложения' -o xxx.dmg') вы можете ** возобновить ** предыдущую загрузку (т. загрузка прерванной серверной части) – mginius

Смежные вопросы