仕事でサーブレットとクライアントスクリプト(DOS)をセットで作ることになったのですが、ローカルに保存するファイル名をサーブレット側で指定する必要にかられたので、Pragmaフィールドに入れてスクリプトで抽出してみました。
- レスポンスヘッダー
HTTP/1.1 200 OK Content-Type: text/plain Pragma: file_name=hoge Content-Length: 12 Connection: keep-alive Server: Jetty(i-jetty 1.0)
- DOSスクリプト
SET OUTPUT_FILE=output.txt SET ENTITY_FILE=entity.dat wget --server-response --output-file=%OUTPUT_FILE% --output-document=%ENTITY_FILE% http://hoge.orz/foo-bar REM Delete the response file when it is empty. FOR %%L IN (%ENTITY_FILE%) DO IF %%~zL==0 DEL %ENTITY_FILE% IF EXIST %ENTITY_FILE% ( REM Find response header "Pragma: file_name=hoge.csv" and rename response file. FOR /F "delims=" %%L IN (%OUTPUT_FILE%) DO ( FOR /F "tokens=1-2" %%I IN ("%%L") DO ( IF "%%I" == "Pragma:" ( FOR /F "delims== tokens=1-2" %%i IN ("%%J") DO ( MOVE %RESPONSE_FILE% %%j ECHO Save to %%j ) ) ) ) DEL %OUTPUT_FILE% )
いやはや、最初DOSでそんなの無理だと絶望したのですが何事もやってみればなんとかなるものですね.