2010-11-02 11 views
23

Estoy tratando de descargar Xcode desde el sitio de desarrollador de Apple usando solo wget o curl. Creo que estoy almacenando con éxito la cookie que necesito para descargar el archivo .dmg, pero no estoy del todo seguro.Descarga de Xcode con wget o curl

Cuando ejecuto este 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 archivo llamado se crea cookies.txt y contiene algo como esto:

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

No estoy completamente seguro, pero creo que debería haber más a eso que eso (específicamente, una cadena alfanumérica después de sessionToken).

Cuando trato de hacer lo mismo con el enrollamiento de usar este:

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 

consigo un archivo llamado xcode-cookie que contiene la misma información que el wget cookies.txt archivo me da, excepto que las líneas se invierten.

Intenté descargar el archivo .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 

Esto me da un archivo llamado 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 , que es sólo una página HTML que contiene el formulario de acceso para el sitio de desarrolladores.

El uso de rizo:

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 

que imprime básicamente el mismo que wget (menos el HTML).

Quiero decir que tiene que ver con la sessionToken no está en la cookie, pero como dije antes no estoy seguro. Incluso traté de exportar las cookies desde mi navegador y siguiendo las instrucciones en la publicación de blog que he vinculado a continuación y en varios otros sitios que encontré mientras buscaba ayuda.

Debo estar haciendo algo mal, a menos que Apple haya cambiado algo desde el 10 de octubre de because this guy seems to be to do something right.

¡Gracias de antemano!

Respuesta

28

para Chrome,

  1. Instalar cookies.txt Chrome extension
  2. Entrar al sitio para desarrolladores de Apple y obtener la URL para descargar la extensión cookies.txt
  3. Ejecutar y descarga de archivos cookies.txt
  4. Desde el directorio de descarga cookies.txt, cargue las cookies en wget y comience la descarga reanudable. Por ejemplo, para descargar Xcode_7.dmg, debe ejecutar:

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

+0

Gracias, petert! Me ahorra la molestia de hacerlo yo mismo. – Joe

+0

Sí, funciona de maravilla: ahora es fácil configurarlo de la noche a la mañana, usando cron – petert

9

He estado en el mismo camino después de fallar varias veces para descargar la última versión de Xcode directamente a mi máquina de desarrollo de Mac. Tampoco pude lograr que el enfoque de Daniel funcionara exactamente como está escrito.

Esto es lo que hizo el trabajo para mí:

  1. Se utiliza Firefox para iniciar sesión en el Centro de Desarrollo iOS

  2. Usado Cookie Exporter 1.5 para salvar las galletas a un archivo de texto, dicen "cookies.txt "

  3. Cookies FTP'd.txt a un servidor de ensayo mío que tiene un tubo de grasa agradable en Internet

  4. wget Se utiliza desde el servidor de ensayo para descargar el archivo (unos 5 minutos)

  5. usado FTP para transferir la DMG presentar de nuevo a mi máquina dev (aproximadamente 2 horas)

aquí está la línea de comandos 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 

el truco aquí es no utilizar la descarga lin k de la página, sino más bien para iniciar la descarga, luego use el menú contextual en la lista de descargas para "Copiar enlace de descarga".

+0

Esto por alguna razón tampoco parecía funcionar, ¡pero aún así me ayudó! – Joe

+0

Petición HTTP enviada, esperando respuesta ... 403 Prohibido 11:05:27 ERROR 403: Prohibido. – nishantcm

+0

Solo para registrarse, su truco aún funciona. Acabo de agregar "--continuar" a wget, por lo que si algo sale mal, puede continuar la descarga en el punto de falla. –

1

Así que parece que he entendido la respuesta a mi propia pregunta. A continuación, le mostramos cómo puede descargar Xcode usando curl.

primer lugar, ejecute lo siguiente:

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 

Abrir el archivo login.html que se crea y buscar estas 2 cosas:

  • action El atributo de la forma de la conexión. Debe estar en/alrededor de la línea 54.
  • El campo input llamado wosid. Esto debería estar en/alrededor de la línea 129.

Copiar el valor del atributo action, así como el valor del atributo value del campo de entrada. Lo necesitarás para el siguiente paso.

Aquí es el siguiente comando 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 
  • Reemplazar {ACTION} con el valor de la acción guardó
  • Reemplazar {USERNAME} y {PASSWORD} con sus credenciales de Apple Dev Center
  • Reemplazar {WOSID} con el valor wosid se guardado
  • Ejecuta el comando

Ahora debería tener la cookie que le permitirá descargar el archivo .dmg. Si no lo ha notado, la cookie se almacena en un archivo llamado cookies.

Ahora acaba de ejecutar este último comando rizo y la imagen de Xcode debe comenzar a descargar:

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 

He intentado esto en 2 máquinas diferentes y funciona en ambos.

+0

Intento esto y comienza y se detiene en 4kb, después de seguir las otras instrucciones ... curl -L - cookies cook-jar -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 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

Aquí hay un pequeño script bash para 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 

Los comentarios son los mismos que para la solución de Joe - Thnx Joe; o) La buena idea es comenzar el análisis del tráfico de la URL de descarga de Xcode .

+1

reemplazando la unme y pwd y ejecutar este script me da : ./wgetapple.sh: línea 14: tac: comando no encontrado Mal día para LOCATION ... –

+0

Ok 'tac' no es parte de los comandos estándar instalados en Mac OS X, y lo olvidé al publicar el script. Simplemente agregando 'tac() {sed -ne '1h; 1! {G; x;}; $ {x; p;}';}' después de las dos exportaciones al comienzo del script, debería corregir este error. están usando macport, también pueden instalar 'gtac' y reemplazar' tac' por 'gtac': o) – denis

14

Aquí hay una secuencia de comandos que utiliza curl en lugar de wget, por lo que funcionará en una Mac común. Todo lo que necesita establecer es la ruta al archivo xcode DMG. La secuencia de comandos le pedirá su nombre de usuario y contraseña y averiguará los valores de ACCIÓN y WOSID para usted.

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

Este script ya no funciona. ¿Quizás las URL han cambiado? – thiagoveloso

3

No es óptimo, pero funciona para mí:

Si saber URL directa para descargar (por ejemplo, que comenzó descarga) a continuación, puede iniciar sesión en el portal de desarrolladores y ejecute el siguiente en la consola JS:

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

Esto copiará comando wget en el portapapeles con todo lo necesario cookies para wget para trabajar. Puede reiniciar este comando en cualquier momento para continuar.

17

Ésta es quizá la forma más fácil de usar rizo:

  • abierta Google Chrome.app;
  • goto sitio developer.apple.com;
  • prensa CMD + + SHIFTJ o haga clic en la parte superior derecha Menu icono ->Tools ->Developer Tools;
  • haga clic en Network panel;
  • ahora haga clic en Xcode enlace de descarga en apple.com;
  • verá uno o más registros de solicitud en el panel Network;
  • haga clic derecho en el último registro, luego haga clic en Copy as cURL;

Ahora, tienes el comando curl de este enlace de descarga con las galletas y otros http-requeset campos, simplemente pegar en su terminal y agrega -o xxx.dmg al final.

+2

Al agregar '-L -C -' al final (después de' -o xxx.dmg'), puede ** reanudar ** las descargas anteriores (es decir, descargar el servidor interrumpido) – mginius