2012-08-08 35 views
0

我正在編寫一個bash腳本來從遠程網站下載文件。但是,遠程網站需要先提交POST表單然後返回一個文件。我設法找到該解決方案,它的工作原理great.Here是:Bash腳本 - 在POST後獲取帶有Curl的文件名

curl -F 'data=filename.rar' --user-agent 'Mozilla/4.0 POST' http://somewebsite.com/index.html -v > filename 

現在的問題是,我必須將stdout時,服務器返回的文件,或者我會在screen.What我得到亂碼代碼想要的是,而不是硬編碼的'文件名',以獲得文件的真實名稱並在那裏重定向STDOUT。 使用-sI選項運行curl來獲取標題然後解析文件名不是解決方法,因爲curl不接受-I和-F選項的組合。它必須是其中之一,但只能使用-FI可以看到標題和服務器也發送文件與them.Is有一種方法來獲取只有標題(請記住,我也要發送發佈數據以獲取文件),所以我可以解析它們並提取文件名?然後,我會做出新的curl請求,但現在將該文件名稱作爲STDOUT值。或者有辦法讓curl自動從頭文件下載到文件名中?

回答

0

繼我對上一個答案的評論之後,您可能需要嘗試使用wget。

FILENAME=`wget --post-file=filename.rar -P dir_to_save_files http://somewebsite.com/index.html | grep "filename" | cut -d"=" -f2 | awk '{print$1}'`; wget --post-file=filename.rar -O $FILENAME -P dir_to_save_files http://somewebsite.com/index.html 

您可能需要玩這個,因爲我沒有測試的方式。如果它實際上不是發佈的文件,也可以使用--post-data =數據。

  • 根據評論編輯。這可能不是最優雅的方式,但它應該相對有效。您可能需要使用cut語句和grep語句來使其指向實際的文件名。
+0

剛試過Wget.Und,wget下載文件,但它保留名稱'index.php'。不知道如何使它保持原始文件名。 – Zed 2012-08-08 22:28:08

+0

這裏有一些info.With - 服務器響應我可以得到標題,這裏是從輸出「內容處置:附件;文件名=」filenameblablabla.ZIP「現在如果我可以讓Wget使用該名稱而不是index.php ... – Zed 2012-08-08 22:42:12

+0

如果沒有提供正確方向的想法,我的編輯可能會有所幫助 – Lipongo 2012-08-09 16:18:04

0

您可能需要使用curl來嘗試-o選項。例如:

curl -F 'data=filename.rar' --user-agent 'Mozilla/4.0 POST' -o outputFileName http://somewebsite.com/index.html -v 
+0

感謝您的評論,但-o實際上是輸出重定向器的作用。我希望不知何故,有一個選項可以從頭文件中找到文件名並在其中輸出數據,但似乎沒有。 – Zed 2012-08-08 18:42:31

0

最後......解決方法是使用--content-disposition選項和Wget保留原始文件名。

+0

...這基本上是相同的選項,稱爲-J,--remote-header-name帶捲曲 – 2012-08-09 08:43:09

相關問題