使用wget或curl下载Xcode

时间:2010-11-02 19:53:41

标签: xcode macos curl wget

我正在尝试使用wget或curl从Apple Developer网站下载Xcode。我想我已经成功存储了下载.dmg文件所需的cookie,但我并不完全确定。

当我运行此命令时:

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的文件,其中包含的信息与wget给我的cookies.txt文件相同,但线条相反。

然后我尝试下载.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月10日以来改变了一些事情because this guy seems to be to do something right

提前致谢!

8 个答案:

答案 0 :(得分:37)

对于Chrome,

  1. 安装cookies.txt Chrome extension
  2. 登录Apple Developer网站并获取下载网址
  3. 运行cookies.txt扩展并下载cookies.txt文件
  4. 从cookies.txt下载目录中,将cookie加载到wget并开始可恢复下载。例如,要下载Xcode_7.dmg,您将运行:

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

答案 1 :(得分:18)

也许这是使用curl最简单的方法:

  • 打开Google Chrome.app;
  • 转到网站developer.apple.com;
  • CMD + SHIFT + J或点击右上角Menu图标 - > Tools - > Developer Tools;
  • 点击Network面板;
  • 现在点击apple.com上的Xcode下载链接;
  • 您将在Network面板中看到一个或多个请求记录;
  • 右键单击最新记录,然后点击Copy as cURL;

现在,您获得了包含Cookie和其他http-requeset字段的下载链接的curl命令,只需粘贴到您的终端并在最后添加-o xxx.dmg

答案 2 :(得分:14)

这是一个使用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

答案 3 :(得分:9)

我反复尝试将最新版本的Xcode直接下载到我的Mac开发机器上,但我刚刚走上了同样的道路。我也无法完全按照书面形式完成丹尼尔的工作方法。

这对我有用:

  1. 使用Firefox登录iOS开发中心

  2. 使用Cookie Exporter 1.5将Cookie保存到文本文件中,例如“cookies.txt”

  3. FTP将cookies.txt发送到我的登台服务器,该服务器上有一个很好的胖管道

  4. 从登台服务器使用wget下载文件(约5分钟)

  5. 使用FTP将DMG文件传回我的开发机器(约2小时)

  6. 这是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
    

    这里的技巧是不使用页面上的下载链接,而是开始下载,然后使用下载列表中的上下文菜单“复制下载链接”。

答案 4 :(得分:3)

不是最佳但对我有用:

如果你知道下载的直接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命令,其中包含wget工作所需的所有cookie。您可以随时重新启动此命令以继续。

答案 5 :(得分:1)

所以我似乎找到了自己问题的答案。以下是使用curl下载Xcode的方法。

首先,运行:

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的{​​{1}}字段。这应该在第129行/附近。

复制wosid属性的值以及输入字段的action属性的值。你需要这些用于下一步。

这是下一个curl命令:

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}替换为Apple开发人员中心凭据
  • {PASSWORD}替换为您保存的wosid值
  • 运行命令

您现在应该拥有允许您下载.dmg文件的cookie。如果您现在还没有注意到,则cookie存储在名为{WOSID}的文件中。

现在只需运行最后一个curl命令,Xcode图像应该开始下载:

cookies

我在两台不同的机器上试过这个并且同时适用于它们。

答案 6 :(得分:1)

这里有一个小的bash脚本来记录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) 好主意是从Xcode的下载URL开始流量分析。

答案 7 :(得分:1)

@petert的回答过去曾经对我有用,但现在它显示错误403(禁止访问)。

我最终使用了Downloader-for-Apple-Developers这个开放源代码的应用程序,它具有图形界面,可以登录到Apple的开发人员网站并下载Xcode .xip文件。

这是图形界面的外观: enter image description here 可以从这里下载最新版本: https://github.com/vineetchoudhary/Downloader-for-Apple-Developers/releases