Загрузка Xcode с wget или curl
Я пытаюсь загрузить Xcode с сайта Apple Developer, используя только wget или curl. Я думаю, что я успешно храню файл cookie, который мне нужен для загрузки файла .dmg, но я не совсем уверен.
Когда я запускаю эту команду:
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, используя это:
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:
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).
Я хочу сказать, что это связано с тем, что sessionToken не находится в cookie, но, как я уже говорил, я не уверен. Я даже попытался экспортировать файлы cookie из своего браузера и следуя инструкциям в сообщении в блоге, которое я связал ниже, и нескольких других сайтах, которые я нашел при поиске помощи.
Я должен делать что-то неправильно, если Apple не изменит что-то с 10 октября потому что этот парень, похоже, что-то делает правильно.
Спасибо заранее!
Ответы
Ответ 1
Для Chrome
Ответ 2
Возможно, это самый простой способ использовать завиток:
- открыть
Google Chrome.app
;
- сайт goto
developer.apple.com
;
- нажмите
CMD
+ SHIFT
+ J
или нажмите на верхний правый значок Menu
→ Tools
→ Developer Tools
;
- нажмите
Network
панель;
- теперь нажмите ссылку
Xcode
скачать на apple.com;
- вы увидите одну или несколько записей запроса на панели
Network
;
- щелкните правой кнопкой мыши самую последнюю запись, затем нажмите
Copy as cURL
;
Теперь у вас есть команда curl для этой ссылки для загрузки с куки файлами и другими полями http-requeset, просто вставьте свой терминал и добавьте -o xxx.dmg
в конец.
Ответ 3
Вот script, который использует curl вместо wget, поэтому он будет работать на складе Mac.
Все, что вам нужно установить, - это путь к файлу DMX xcode.
script запросит у вас имя пользователя и пароль и
он будет определять значения 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
Ответ 4
Я только что пошел по той же дороге после неоднократного сбоя, чтобы загрузить последнюю версию Xcode прямо на мою машину Mac dev. Я также не мог заставить Дэниела работать так, как написано.
Это то, что работало для меня:
-
Используется Firefox для входа в центр iOS dev
-
Использовать Cookie Exporter 1.5 для сохранения файлов cookie в текстовый файл, скажем, "cookies.txt"
-
FTP'd cookies.txt на промежуточном сервере, который имеет приятную толстую трубку в Интернете
-
Используется wget с промежуточного сервера для загрузки файла (около 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
Хитрость здесь заключается в том, чтобы НЕ использовать ссылку для загрузки со страницы, а чтобы начать загрузку, используйте контекстное меню в списке загрузки "Копировать ссылку для скачивания".
Ответ 5
Не оптимально, но работает для меня:
Если вам известен прямой URL-адрес для загрузки (например, вы начали загрузку), вы можете войти на портал разработчика и запустить следующую консоль 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. Вы можете перезапустить эту команду в любое время, чтобы продолжить.
Ответ 6
Итак, мне показалось, что я отвечу на свой вопрос. Здесь вы можете скачать 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 вокруг.
Скопируйте значение атрибута action
, а также значение атрибута value
поля ввода. Для этого вам понадобятся следующие шаги.
Здесь следующая команда curl:
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
.
Теперь просто запустите эту последнюю команду curl, и изображение 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
Я пробовал это на двух разных машинах и работает на обоих.
Ответ 7
Здесь немного bash script для 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
Комментарии те же, что и для joe Solution - Thnx Joe; o)
Хорошая идея - начать анализ трафика с URL-адреса загрузки Xcode.