2010-11-02 32 views
23

Tôi đang cố tải xuống Xcode từ trang web của Nhà phát triển Apple chỉ bằng wget hoặc curl. Tôi nghĩ rằng tôi đang lưu trữ thành công cookie tôi cần tải xuống tệp .dmg, nhưng tôi không hoàn toàn chắc chắn.Tải xuống Xcode với wget hoặc curl

Khi tôi chạy lệnh này:

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 

một tập tin gọi cookies.txt được tạo ra và chứa một cái gì đó như thế này:

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

Tôi không hoàn toàn chắc chắn, nhưng tôi nghĩ rằng không nên có nhiều với nó hơn thế (cụ thể là một chuỗi ký tự chữ và số sau sessionToken).

Khi tôi cố gắng làm điều tương tự với curl sử dụng này:

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 

tôi nhận được một tập tin gọi là xcode-cookie có chứa các thông tin giống như cookies.txt tập tin wget mang lại cho tôi, ngoại trừ các dòng được đảo ngược.

Sau đó tôi đã cố tải xuống tệp .dmg.

Sử dụng 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 

này mang lại cho tôi một tập tin gọi 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 , mà chỉ là một trang HTML có chứa biểu mẫu đăng nhập cho các trang web phát triển.

Sử dụng 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 

nào in cơ bản được điều tương tự như wget (trừ HTML).

Tôi muốn nói rằng nó đã làm với sessionToken không được trong cookie, nhưng như tôi đã nói trước khi tôi không chắc chắn. Tôi thậm chí đã thử xuất các cookie từ trình duyệt của mình và làm theo hướng dẫn trong bài đăng trên blog mà tôi đã liên kết bên dưới và một số trang web khác mà tôi đã tìm thấy trong khi tìm kiếm trợ giúp.

Tôi phải làm điều gì đó sai, trừ khi Apple đã thay đổi điều gì đó kể từ ngày 10 tháng 10 because this guy seems to be to do something right.

Cảm ơn trước!

Trả lời

28

Đối với Chrome,

  1. Install cookies.txt Chrome extension
  2. Đăng nhập vào site Apple phát triển và nhận được url để tải về phần mở rộng cookies.txt
  3. Run và tải file cookies.txt
  4. Từ thư mục tải xuống cookie.txt, tải cookie vào wget và bắt đầu tải xuống lại. Ví dụ, để tải Xcode_7.dmg, bạn sẽ chạy:

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

+0

Cảm ơn, petert! Hãy giúp tôi giải quyết khó khăn khi tự làm. – Joe

+0

Yeh, làm việc một điều trị - bây giờ nó dễ dàng để thiết lập nó tải qua đêm, sử dụng cron – petert

9

Tôi vừa đi xuống cùng một con đường sau khi không liên tục tải xuống phiên bản Xcode mới nhất trực tiếp về máy Mac dev của tôi. Tôi cũng không thể có được cách tiếp cận của Daniel để làm việc chính xác như được viết.

Đây là những gì đã làm việc cho tôi:

  1. sử dụng Firefox để đăng nhập vào trung tâm dev iOS

  2. Dùng Cookie Exporter 1.5 để lưu các tập tin cookie vào một tập tin văn bản, nói "cookies.txt "

  3. Cookie FTP.txt để một dàn máy chủ của tôi mà có một ống chất béo đẹp lên mạng Internet

  4. wget sử dụng từ máy chủ dàn để tải về các tập tin (khoảng 5 phút)

  5. đã qua sử dụng FTP để chuyển DMG nộp trở lại máy dev của tôi (khoảng 2 giờ)

đây là dòng lệnh 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 

Bí quyết ở đây là để KHÔNG sử dụng tải lin k từ trang, nhưng để bắt đầu tải xuống, hãy sử dụng menu ngữ cảnh trong danh sách tải xuống để "Sao chép liên kết tải xuống".

+0

Điều này vì lý do nào đó dường như không hoạt động, nhưng nó vẫn giúp tôi! – Joe

+0

Đã gửi yêu cầu HTTP, đang chờ phản hồi ... 403 Bị cấm 11:05:27 L ERI 403: Bị cấm. – nishantcm

+0

Chỉ để đăng ký, mẹo của bạn vẫn hoạt động. Tôi chỉ cần thêm "--continue" để wget, vì vậy nếu có điều gì sai, bạn có thể tiếp tục tải xuống tại thời điểm thất bại. –

1

Vì vậy, tôi dường như đã tìm ra câu trả lời cho câu hỏi của riêng mình. Đây là cách bạn có thể tải xuống Xcode bằng cách sử dụng curl.

Đầu tiên, hãy chạy này:

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 

Mở login.html tệp được tạo ra và tìm kiếm những 2 điều:

  • Các action thuộc tính của biểu mẫu đăng nhập. Nó phải ở trên/xung quanh dòng 54.
  • Trường input có tên wosid. Địa chỉ này sẽ nằm trên/xung quanh dòng 129.

Sao chép giá trị của thuộc tính action cũng như giá trị của thuộc tính value của trường nhập. Bạn sẽ cần những bước này cho bước tiếp theo.

Dưới đây là lệnh tiếp theo 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 
  • Thay {ACTION} với giá trị hành động bạn đã lưu
  • Thay {USERNAME}{PASSWORD} với các thông tin của Apple Dev Center của bạn
  • Thay {WOSID} với giá trị wosid bạn đã lưu
  • Chạy lệnh

Bây giờ bạn sẽ có cookie cho phép bạn tải xuống tệp .dmg. Nếu bạn chưa nhận thấy bây giờ, cookie được lưu trữ trong một tệp có tên là cookies.

Bây giờ chỉ cần chạy lệnh curl cuối cùng này và hình ảnh Xcode nên bắt đầu tải về:

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 

Tôi đã thử này trên 2 máy khác nhau và hoạt động trên cả hai.

+0

Tôi thử điều này và nó bắt đầu và dừng ở 4kb, sau khi làm theo các hướng dẫn khác ... curl -L - cookie cookie - cookie cookie -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

Dưới đây là một kịch bản bash ít hoặc 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 

Comments đều giống nhau như đối với giải pháp joe - Thnx Joe; o) Ý tưởng tốt là để bắt đầu phân tích lưu lượng từ url tải của Xcode .

+1

thay thế không công khai và pwd và chạy tập lệnh này mang lại cho tôi : ./wgetapple.sh: dòng 14: tac: lệnh không tìm thấy Ngày xấu cho LOCATION ... –

+0

Ok 'tac' không phải là một phần của các lệnh chuẩn được cài đặt trên Mac OS X và tôi đã quên điều này khi đăng tập lệnh. Chỉ cần thêm 'tac() {sed -ne '1h; 1! {G; x;}; $ {x; p;}';}' sau khi xuất khẩu hai lúc bắt đầu tập lệnh phải sửa lỗi này. đang sử dụng macport, bạn cũng có thể cài đặt 'gtac' và thay thế' tac' bằng 'gtac': o) – denis

14

Đây là tập lệnh sử dụng curl thay vì wget, vì vậy nó sẽ hoạt động trên một máy Mac có sẵn. Tất cả những gì bạn cần đặt là đường dẫn đến tệp DMG xcode. Tập lệnh sẽ hỏi bạn tên người dùng và mật khẩu của bạn và nó sẽ tìm ra các giá trị ACTION và WOSID cho bạn.

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

Tập lệnh này không còn hoạt động. Có lẽ các url đã thay đổi? – thiagoveloso

3

Không tối ưu nhưng làm việc cho tôi:

Nếu bạn biết URL trực tiếp để tải xuống (ví dụ: bạn bắt đầu tải xuống), sau đó bạn có thể đăng nhập vào cổng thông tin dành cho nhà phát triển và chạy JS sau trong bảng điều khiển:

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

Điều này sẽ sao chép lệnh wget vào clipboard bằng mọi thứ cần thiết cookie cho wget để làm việc. Bạn có thể khởi động lại lệnh này bất cứ lúc nào để tiếp tục.

17

Có lẽ đây là cách dễ nhất để sử dụng curl:

  • mở Google Chrome.app;
  • trang web goto developer.apple.com;
  • nhấn CMD + SHIFT + J hoặc nhấp vào trên cùng bên phải Menu biểu tượng ->Tools ->Developer Tools;
  • nhấp vào Network bảng điều khiển;
  • hiện nhấp vào Xcode liên kết tải xuống tại apple.com;
  • bạn sẽ thấy một hoặc nhiều bản ghi yêu cầu trong bảng điều khiển Network;
  • nhấp chuột phải vào bản ghi mới nhất, sau đó nhấp vào Copy as cURL;

Bây giờ, bạn có lệnh curl cho liên kết tải xuống này với cookie và các trường http requeset khác, chỉ cần dán vào thiết bị đầu cuối của bạn và thêm -o xxx.dmg ở cuối.

+2

Thêm '-L -C -' vào cuối (sau khi đã đề xuất' -o xxx.dmg'), bạn có thể ** tiếp tục ** các lần tải xuống trước đó (tức là tải xuống phía máy chủ bị gián đoạn) – mginius

Các vấn đề liên quan