2010-11-02 22 views
23

Sto cercando di scaricare Xcode dal sito degli sviluppatori Apple usando solo wget o arricciatura. Penso di aver salvato con successo il cookie di cui ho bisogno per scaricare il file .dmg, ma non ne sono completamente sicuro.Download di Xcode con wget o arricciatura

Quando eseguo questo comando:

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 

un file chiamato cookies.txt viene creato e contiene qualcosa di simile:

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

Io non sono del tutto certo, ma penso che ci dovrebbe essere più ad esso che (in particolare, una stringa alfanumerica dopo sessionToken).

Quando provo a fare la stessa cosa con l'arricciatura usando questo:

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 

ho un file chiamato xcode-cookie che contiene le stesse informazioni del cookies.txt file di wget mi dà, se non che le linee sono invertite.

Ho quindi provato a scaricare il file .dmg.

Usando 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 

Questo mi dà un file chiamato 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 , che è solo una pagina HTML contenente il modulo di login per il sito degli sviluppatori.

Utilizzando ricciolo:

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 

che stampa fondamentalmente la stessa cosa come wget (meno il codice HTML).

Voglio dire che ha a che fare con la sessione. I cookie non sono nel cookie, ma come ho detto prima non sono sicuro. Ho persino provato ad esportare i cookie dal mio browser e seguendo le istruzioni nel post del blog che ho linkato qui sotto e in molti altri siti che ho trovato durante la ricerca di aiuto.

Devo fare qualcosa di sbagliato, a meno che Apple non abbia cambiato qualcosa dal 10 ottobre because this guy seems to be to do something right.

Grazie in anticipo!

risposta

28

Per Chrome,

  1. Installare cookies.txt Chrome extension
  2. Login al sito Apple Developer e ottenere l'URL per il download di
  3. Run estensione cookies.txt e scaricare il file cookies.txt
  4. Dalla directory di download cookies.txt, carica i cookie in wget e avvia il download ripristinabile. Ad esempio, per scaricare Xcode_7.dmg, si dovrebbe eseguire:

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

+0

Grazie, petert! Mi risparmia la fatica di farlo da solo. – Joe

+0

Sì, funziona a meraviglia - ora è facile scaricarlo durante la notte, usando cron – petert

9

Sono appena stato sulla stessa strada dopo aver fallito ripetutamente a scaricare l'ultima versione di Xcode direttamente sul mio Mac Dev Machine. Inoltre, non ho potuto convincere l'approccio di Daniel a funzionare esattamente come scritto.

Questo è ciò che ha funzionato per me:

  1. Utilizzato Firefox per accedere al centro dev iOS

  2. Utilizzato Cookie Exporter 1.5 per salvare i cookie in un file di testo, dire "cookies.txt "

  3. FTP cookies.txt a un server di gestione temporanea che in me ha un bel tubo di grasso su Internet

  4. wget usata dal server di gestione temporanea per scaricare il file (circa 5 minuti)

  5. usato FTP per trasferire il file DMG di nuovo a la mia macchina dev (circa 2 ore)

Ecco la linea di comando 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 

il trucco è non utilizzare per il download lin k dalla pagina, ma piuttosto per avviare il download, quindi utilizzare il menu di scelta rapida nell'elenco di download su "Copia collegamento di download".

+0

Questo per qualsiasi motivo non sembra funzionare, ma mi ha comunque aiutato! – Joe

+0

Richiesta HTTP inviata, in attesa di risposta ... 403 Forbidden 11:05:27 ERRORE 403: Proibito. – nishantcm

+0

Solo per la registrazione, il tuo trucco è ancora funzionante. Ho appena aggiunto "--continue" a wget, quindi se qualcosa va storto, puoi continuare a scaricare nel punto di errore. –

1

Quindi mi è sembrato di capire la risposta alla mia domanda. Ecco come scaricare Xcode usando curl.

In primo luogo, eseguire questo:

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 

Aprire il file login.html che viene creato e cercare queste 2 cose:

  • L'attributo action del modulo di login. Dovrebbe essere sulla/attorno alla linea 54.
  • Il campo input denominato wosid. Questo dovrebbe essere on/intorno alla linea 129.

copia il valore dell'attributo action nonché il valore dell'attributo value del campo di immissione. Avrai bisogno di questi per il prossimo passo.

Ecco il successivo comando ricciolo:

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 
  • Sostituire {ACTION} con il valore dell'azione è stato salvato
  • Sostituire {USERNAME} e {PASSWORD} con le credenziali di Apple Dev Center
  • Sostituire {WOSID} con il valore wosid voi salvato
  • Esegui il comando

Ora dovresti avere il cookie che ti permetterà di scaricare il file .dmg. Se non lo hai notato, il cookie viene memorizzato in un file chiamato cookies.

Ora basta eseguire questo ultimo comando curl e l'immagine Xcode dovrebbe iniziare il download:

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 

Ho provato questo su 2 macchine diverse e funziona su entrambi.

+0

Ho provato questo e si avvia e si ferma a 4kb, dopo aver seguito le altre istruzioni ... arricciare -L - cookie cookie -cookie - cookie cookie -A "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; it-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

Ecco un piccolo script bash per 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 

commenti sono gli stessi che per Joe Solution - Thnx Joe; o) La buona idea è quella di avviare l'analisi del traffico dal download URL di Xcode .

+1

in sostituzione di uname e pwd e l'esecuzione di questo script mi ​​dà : ./wgetapple.sh: riga 14: tac: comando non trovato Giorno errato per LOCATION ... –

+0

Ok 'tac' non fa parte dei comandi standard installati su Mac OS X e l'ho dimenticato durante la pubblicazione dello script. Semplicemente aggiungendo 'tac() {sed -ne '1h; 1! {G; x;}; $ {x; p;}';}' dopo che le due esportazioni all'inizio dello script dovrebbero correggere questo bug. stai usando macport, puoi anche installare 'gtac' e sostituire' tac' con 'gtac': o) – denis

14

Ecco uno script che utilizza il ricciolo al posto di wget, quindi funzionerà su un Mac di serie. Tutto ciò che devi impostare è il percorso del file DMG di xcode. Lo script chiederà il nome utente e la password e determinerà i valori ACTION e WOSID per te.

#!/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

Questo script non funziona più. Forse le url sono cambiate? – thiagoveloso

3

Non ottimale, ma funziona per me:

Se conoscere URL diretto per il download (ad esempio, hai iniziato il download) quindi è possibile effettuare il login sul portale per gli sviluppatori ed eseguire il seguente JS in consolle:

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

Questo copierà comando wget in appunti con tutto il necessario biscotti per wget to work. È possibile riavviare questo comando in qualsiasi momento per continuare.

17

Forse questo è il modo più semplice per usare curl:

  • aperta Google Chrome.app;
  • goto site developer.apple.com;
  • stampa CMD + SHIFT + J o cliccare in alto a destra Menu icona ->Tools ->Developer Tools;
  • clic sul pannello Network;
  • ora fare clic sul collegamento di download Xcode presso apple.com;
  • vedrete uno o più record di richiesta nel pannello Network;
  • fare clic con il tasto destro del mouse sull'ultimo record, quindi fare clic su Copy as cURL;

Ora, si ha il comando ricciolo di questo collegamento per il download con i biscotti e altri http-requeset campi, basta incollare al vostro terminale e aggiungere -o xxx.dmg alla fine.

+2

Aggiungendo '-L -C -' alla fine (dopo suggerito' -o xxx.dmg'), puoi ** resume ** download precedenti (ad es. scarica interrotto lato server) – mginius

Problemi correlati