2010-04-23 28 views
26

Câu hỏi này liên quan đến phiên bản dòng lệnh của cURL.Làm cách nào để lưu tệp bằng tên tệp tiêu đề phản hồi với cURL

Tôi đang cố tải tệp xuống từ tập lệnh cgi.

http://someserver/perl/dl.pl?ID=2

Sử dụng một trình duyệt filename đi lên như 'remotefilename.gz' cURL muốn lưu các tập tin như 'dl.pl?ID=2'

Làm thế nào để tôi nhận được cURL để tiết kiệm vào một tệp có tên tệp từ tiêu đề phản hồi?

Trả lời

48

nếu bạn có đủ curl mới (phiên bản 7.20.0 trở lên), -J/--remote-header-name là những gì bạn muốn.

Bạn sử dụng -J kết hợp với -O, làm cho curl sử dụng phần tên tệp từ URL làm cách chính để đặt tên tệp đầu ra và sau đó nếu có tiêu đề Nội dung: trong phản hồi, curl sẽ sử dụng tên đó để thay thế.

+6

có nhớ rằng bạn nên sử dụng -J/- xa-header-tên kết hợp với -O/- Tùy chọn tên từ xa nếu không nó không hoạt động. – sepehr

+1

'-OJ' là một lựa chọn sát thủ, thật dễ nhớ :) – colminator

-3

bạn có thể thử tùy chọn -o hoặc -O.

+2

-o yêu cầu một tên tập tin để lưu vào -O tiết kiệm vào đĩa như dl.pl?ID=2 – John

13
curl http://example.com/dl.php?file=3123123 -O -J 

nếu máy chủ sử dụng chuyển hướng sử dụng các:

--location-trusted 
--max-redirs 10 
+0

Hãy cẩn thận với' --location-trusted' vì nó sẽ chuyển tiếp thông tin auth HTTP để chuyển hướng, ngay cả trên các miền khác nhau. '--location' có vẻ như là một lựa chọn an toàn hơn. – jchook

13

tôi thấy rằng -OJ curl đã đem lại cho tôi Segmentation Fault: 11 lỗi khi cố gắng tải về nhiều URL cùng một lúc.

Giải pháp của tôi là sử dụng wget. Phiên bản mới nhất hỗ trợ tiêu đề HTTP Content-Disposition, thường chứa thông tin tên tệp.

wget --content-disposition http://example.com/download/url 
Các vấn đề liên quan