Скачиваем Xcode с помощью wget или curl - PullRequest
27 голосов
/ 02 ноября 2010

Я пытаюсь загрузить 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 октября , потому что этот парень, кажется, что-то делает правильно .

Заранее спасибо!

Ответы [ 7 ]

39 голосов
/ 10 марта 2011

Для Chrome,

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

    wget --load-cookies = cookies.txt -c http://adcdownload.apple.com/Developer_Tools/Xcode_7/Xcode_7.dmg

18 голосов
/ 18 сентября 2014

Возможно, это самый простой способ использования curl:

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

Теперь у вас есть команда curl для этой ссылки на скачивание с файлами cookie и другими полями http-Requeset, просто вставьте ее в свой терминал и добавьте -o xxx.dmg в конце.

14 голосов
/ 18 января 2011

Вот скрипт, который использует curl вместо wget, поэтому он будет работать на стандартном Mac.Все, что вам нужно установить, это путь к файлу xcode DMG.Сценарий запросит у вас имя пользователя и пароль и определит значения 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
9 голосов
/ 03 ноября 2010

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

Вот что у меня сработало:

  1. Использовал Firefox для входа в центр разработки iOS

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

  3. FTPd cookies.txt на мой промежуточный сервер, на котором есть хороший толстый канал, в Интернет

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

  5. Использовал FTP для передачи файла DMG обратно на мою машину разработчика (около 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

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

3 голосов
/ 07 августа 2014

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

Если вам известен прямой 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. Вы можете перезапустить эту команду в любое время, чтобы продолжить.

1 голос
/ 11 декабря 2010

Вот небольшой bash-скрипт для 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

Комментарии такие же, как и для решения Джо - Thnx Joe; o) Хорошая идея - начать анализ трафика с URL загрузки Xcode.

1 голос
/ 04 ноября 2010

Так что я, кажется, выяснил ответ на свой вопрос. Вот как вы можете скачать 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 и найдите следующие две вещи:

  • Атрибут 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

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

...