SYSYA [オプション] (任意のURLアドレス)
URLアドレス及びオプションは、それぞれをスペース文字で区切って指定します。
URLアドレスやオプションがスペース文字を含む場合は、ダブルクォーテーション(")で囲って下さい。
URLアドレスやオプションがダブルクォーテーションを含む場合は、ダブルクォーテーションで囲った上で、
該当するダブルクォーテーションの直前に、バックスラッシュ記号(\)を挿入して下さい。
あと、コマンドラインに何も指定せずに SYSYA を実行させると、簡単なヘルプを表示します。
URLアドレスは1つしか指定できません。
(2つ以上指定すると、エラーになる)
HTTPのURLアドレスは、プロトコル表記(http://)を省略可能です。
まるごと省略しても構いませんし、掲示板でよく使われる、「ttp://」や「tp://」といった中途半端な表記でも、
SYSYA 側で「http://」と解釈します。
また、「http:」の後ろの2つのスラッシュも、省略しても構いません。
例: | ||
SYSYA www.sysya.net/ | ||
SYSYA http:www.sysya.net/ | ||
SYSYA ttp://www.sysya.net/ | ||
↑ | ||
全部「http://www.sysya.net/」と解釈する |
FTPのURLアドレスは、プロトコル表記(ftp://)を省略できません。
ただし、「ftp:」の後ろの2つのスラッシュだけは、省略しても構いません。
オプションは、URLアドレスの前にあっても後にあっても構いません。
同類のオプションが複数指定されている場合は、後のオプションを優先します。
環境変数 SYSYACMD が定義されている場合は、その内容をデフォルトのオプションとして読み込みます。
(コマンドラインで直接指定されたオプションの方が、優先順位は高い)
/C
同名のファイルが既に存在する場合の動作を設定します。
/D
リクエストヘッダの出力の有無を設定します(※)。
/E
送信するエンティティボディを他の文字コードに変換します。
/F
URLアドレスの文字コードを明示します。
/G
エンティティボディをローカルディスクに保存します。
/HA /HC /HH /HL /HR /HT /HU /HZ
リクエストヘッダを追記します(※ ← /HHのみ)。
(リクエストヘッダについて補足)
/J
レスポンスヘッダ内の「Location:」のアドレスを追跡します。
/K
受信異常終了時もファイルを保持します。
/L
受信するコンテンツタイプを限定します。
/M
送信するリクエストメソッドを選択します。
/N
FTPのデータポートの準備方法を選択します。
/R
サーバーからのレスポンスコードを、プログラムの戻り値にします。
/S
標準出力(stdout)への、受信状況の出力の有無を設定します(※)。
/T
通信中断時の再試行回数を指定します(※)。
/U
エンティティボディ受信時に、レスポンスコードが 503(Service Unavailable) などの場合も再試行します。
/V
プログラム処理の進行状況を、標準出力(stdout)に出力します(※)。
/W
サーバーからのレスポンスの待ち時間を設定します(※)。
/X
プロキシを介してHTTP/FTPサーバーに接続します。
/?
簡単なヘルプを表示します。
例: | ||
SYSYA /-V http://www.sysya.net/ | ||
↑ | ||
進行状況出力を出力しないようにします |
HTTPのURLアドレスに対しては、「/N」以外の全てのオプションが有効です。
FTPのURLアドレスに対しては、幾つかのオプションは効果がありません。
(無効なオプションを指定してもエラーにはなりませんが、無視します)
以下の説明において、HTTP/FTP各々に対してのみ効果があるオプションには、見出しの右隣に
「※HTTP only」「※FTP only」などと記してあります。
「/CA」のオプションを指定した場合、継続受信を許可します。
(「Append」の「A」です)
「/CO」のオプションを指定した場合、既存のファイルを破棄し、ファイルの先頭から受信し直します。
(「Overwrite」の「O」です)
「/CQ」のオプションを指定した場合、プログラムを即座に終了します(戻り値2)。
(「Quit」の「Q」です)
※ |
互換性維持のために、ver1.x 以前のバージョンと同様の「/C」のオプションの記述方法もサポートしています。 「/C」と記述すれば、「/CA」と解釈します。 「/C-」と記述すれば、「/CO」と解釈します。 (「/CQ」に該当するオプションは、元々ありません) |
「/CA」オプションによる継続受信についてですが、具体的には、URLアドレスのファイル名と同じ名前のファイルがローカルディスクに存在する場合、
そのファイルサイズ以降のみを返信するようにサーバーに通知し、
受信したエンティティボディを、そのファイルの末尾に追加します。
また、「/CA」のオプションを指定しておくと、受信途中でプログラムが異常終了した場合でも、
ローカルディスクのファイルを、受信途中の状態で保存します。
(これは「/K」のオプションを指定したのと同じです)
ただし、「/CA」のオプションを指定していても、サーバー側が途中からのデータ返信を認めなかった場合
(レスポンスコードが 206(Partial Content) でなかった場合)は、ファイルの先頭から受信処理を行います。
(その際、既存のファイルは、無条件で破棄します)
また、エンティティボディを特定のファイルに保存しないようにコマンドラインで指定している場合も、「/CA」のオプションの指定を無視して、ファイルの先頭から受信処理を行います。
(例えば「/G*」のオプションで標準出力(stdout)に出力するよう指示している場合)
これらのオプションは、基本的には「/G」のオプションと併用した場合などに、
エンティティボディをファイルに保存する際の挙動を指定するための物ですが、
エンティティボディの受信を伴わない「HEAD」のリクエストメソッドを選択している場合(デフォルト)にも、効果はあります。
同じ名前のファイルが既に存在した場合、「/CA」のオプションを指定していれば、
既存のファイルのサイズの情報を(「GET」等のリクエストを行う場合と同様に)リクエストヘッダに追記します。
それ以外のオプションを指定するか、何れのオプションも指定しなければ、既存のファイルを無視します。
何れの場合も、既存のファイルには手を付けず、そのまま残します。
「/CA」のオプションは、HTTPのURLアドレスに対してのみ、且つ「HEAD」「GET」「TRACE」の何れかのリクエストメソッドを選択している場合のみ意味を持ちます。
(それ以外のリクエストメソッドを選択している場合は、無視します)
「/CO」のオプションは、HTTPとFTPの双方に対して、且つ全てのリクエストメソッドに対して使用可能です。
「/CQ」のオプションオプションは、「/G」のオプションと併用した場合のみ意味を持ちます。
(「/G」のオプションを指定していないと、無視します)
なお、リクエストメソッドの選択、およびエンティティボディの受信については、
「/G」のオプション及び「/M」のオプションの解説を参照して下さい。
0 | ··· | リクエストヘッダを出力しない。 |
1 | ··· | リクエストヘッダだけを出力し、プログラムを終了する(サーバーに接続しない)。 |
2 | ··· | リクエストヘッダを出力する(デフォルト)。 |
「/D1」のオプションは、デバッグなど、リクエストヘッダの内訳を目視確認したい場合に使用します。
エンティティボディの送信状況は、約64Kバイト送信毎にアスタリスク記号(*)を連ねる形で表示します。
(更にその後ろに、送信済みの比率をパーセント表示する)
ただしこの方式だと、大きなファイルを送信する場合に、画面がアスタリスク記号で埋め尽くされてしまいます。
それを避けたい場合は、「/D」の直後にプラス記号(+)を付けます。すると、送信状況の表示が1文字の簡単なアニメーションで表示されるようになります。
以下、OS/2版のみ OS/2 版は、UTF-8 の取り扱いは、Warp4 以降でのみ利用可能です。
また、UTF-8 の文字テーブルは、Windows の物に合わせてあります。 「~」等の、Windows と OS/2 でコードが異なる文字を取り扱う際には注意して下さい。
このオプションは、エンティティボディの送信を伴うリクエストメソッドである、
「POST」「PUT」「APPEND」の何れかと併用した場合のみ意味を持ちます。
(リクエストメソッドの選択については、「/M」のオプションの解説を参照して下さい)
また、このオプションの変換対象は送信時のエンティティボディのみで、受信時のエンティティボディは変換しません。
以下、OS/2版のみ OS/2 版は、UTF-8 の取り扱いは、Warp4 以降でのみ利用可能です。
また、UTF-8 の文字テーブルは、Windows の物に合わせてあります。 「~」等の、Windows と OS/2 でコードが異なる文字を取り扱う際には注意して下さい。
このオプションは、エンティティボディをローカルディスクへ保存する際に、そのファイル名を決めるために使用します。
デフォルトでは、URLアドレスのファイル名の部位、またはレスポンスヘッダの「Content-Disposition:」の行のファイル名の部位を、
そのままファイル名として用います。このオプションを用いて、それらのファイル名がどの文字コードで記述されているかを明示すれば、
その文字列を、OSのデフォルトの文字コード(日本語版はシフトJISコード)に変換し、ファイル名として用います。
なお、このオプションは、「/C」「/G」のオプションなど、
ローカルディスクのファイルと関連するオプションと併用している場合のみ意味を持ちます。
(それらのオプションを指定していないと、無視します)
例: | ||
SYSYA /G /FUTF8 http://www.sysya.net/%CE%B1%CE%B2%CE%B3.html | ||
↑ | ||
「αβγ.html」というファイル名で保存する |
「/G」の後ろに、保存するパス、またはファイル名を指定できます。
ファイル名が省略された場合は、URLアドレスのファイル名で保存します。
URLアドレスにファイル名が含まれていない(末尾がスラッシュ(/)である)場合は、
HTTPの場合は「index.htm」、FTPの場合は「listing.txt」という名前で保存します。
ファイル名の部位に、疑問符(?)等の、ファイル名に使えない文字が含まれる場合は、
「%」+ASCIIコードの16進数の表記に置き換えます。
例: | ||
SYSYA /GC:\ http://www.sysya.net/download.php?id=1234 | ||
↑ | ||
ドライブ C: のルートディレクトリに、「download.php%3Fid=1234」というファイル名で保存する |
継続受信を行います。
既存のファイルの、ファイルサイズ以降のみを返信対象とするようにサーバーに通知し、
受信したエンティティボディを、そのファイルの末尾に追加します。
(これは「/CA」のオプションを指定したのと同じです)
なお、この選択肢は、HTTPのURLアドレスに対して「GET」か「TRACE」の何れかのリクエストメソッドを選択している場合のみ表示します。
既存のファイルを破棄し、ファイルの先頭から受信し直します。
(これは「/CO」のオプションを指定したのと同じです)
プログラムを終了します(戻り値1)。
(これは「/CQ」のオプションを指定したのと同じです。ただし、戻り値が異なります)
なお、上記のファイル命名規制において、ファイルを作成するローカルディスクのファイルシステムの仕様は、全く考慮されません。
例えば、8.3字の制限があるFATドライブ上にて、上記の例のようなファイル保存を行うと、「File open failed」のエラーになります。
その場合は、明示的に、そのファイルシステムの仕様に沿ったファイル名を指定して下さい。
この機能で受信できるのは、デフォルトではレスポンスコードが200台(200(OK) 206(Partial Content) など)の場合のみです。
他のレスポンスコードが戻された場合、受信処理は行わず、異常終了扱いにします(戻り値2)。
レスポンスコードに関わらずエンティティボディを保存したい場合は、「/G」の直後、
パスまたはファイル名の前にプラス記号(+)を付けます。
この場合、レスポンスコードが幾つであるかに関わらず、受信が完了さえすれば、正常終了にします(戻り値0)。
あと、特殊な指定法で、ファイル名にアスタリスク1字(*)を指定すると標準出力(stdout)に、
アスタリスク2字(**)を指定すると標準エラー出力(stderr)に、エンティティボディを出力できます。
(バイナリデータも出力可能)
シェル(CMD.EXE または COMMAND.COM)のパイプ機能を用いて、他のプログラムと組み合わせて実行させる、等の用途が考えられます。
注意を要するのは、その際に、ただ単に「/G*」のオプションを用いただけでは、エンティティボディだけではなく、
リクエストヘッダやレスポンスヘッダ、各種メッセージ等の余計なデータも、標準出力(stdout)へ出力されてしまう事です。
これを抑制するためには、「/D0」「/S0」「/-V」のオプションも同時に指定し、
エンティティボディ以外は一切、標準出力(stdout)へ出力しないようにします。
(詳細は、各オプションの解説と「オプション使用例」を参照して下さい)
また、このオプションは、FTPの認証情報を定義するためにも使えます。
FTPのURLアドレスに対して、アカウント情報を送る必要がある場合は、
パスワードの後ろにコロン(:)を挟んで、アカウント情報を追記して下さい。
なお、FTPのデフォルトのログイン方法は、ユーザー名は「anonymous」になります。同じくパスワードは「-sysya@」になります。
(匿名(anonymous)でのログイン時に、パスワードの代わりにメールアドレスの入力を要求するFTPサーバーがよくあるので、試しにそれっぽい文字列を送ってみる)
ところで、FTPにおいてユーザー名を指定する際に、FTPサーバーのホスト名およびポート番号を、ユーザー名に追記する必要がある場合があります。
(FTPプロクシを経由する場合など)
その場合、ユーザー名の記述方法は「username@hostname:portnum」になります。
(パスワードやアカウント情報が必要なら、その後にコロン(:)を挟んで追記する)
上記のようなユーザー名の記述を行い、且つパスワードやアカウント情報を省略する場合、そのまま省略すると問題が生じます。
ホスト名とポート番号の間のコロン(:)を、「/HA」のオプションにおける、
パスワードやアカウント情報の区切りのためのコロン(:)であると誤認してしまうからです。
その場合は、パスワードやアカウント情報の区切りのコロン(:)を、全て省略せずに追記する必要があります。
(区切りのコロン(:)は、文字列の後ろにある方を優先して認知する)
例: | ||
SYSYA /HAanonymous@ftp.sysya.net:21:: ftp://proxy.sysya.net:8021/ | ||
↑ | ||
プロキシ「proxy.sysya.net:8021」を経由して「ftp.sysya.net:21」に、匿名(anonymous)でログインします。 「/HA」の末尾の2つのコロン(:)は、それぞれパスワード/アカウント情報のための区切り文字です。 このように記述すれば、「パスワード/アカウント情報ともに未指定である」と判断されます。 | ||
SYSYA /HAanonymous@ftp.sysya.net:21 ftp://proxy.sysya.net:8021/ | ||
↑ | ||
因みにこれだと、末尾の「21」の部位をパスワードだと誤認してしまうのでNGです。 |
「/HA」の直後にユーザー名およびパスワードを記述した場合、コマンドラインで指定されたURLアドレスのプロトコルに対して、その認証情報を適用します。
明示的に、どちらのプロトコルに対しての認証情報かを指定したい場合は、「/HA」の直後に「http:」か「ftp:」を追記して下さい。
例: | ||
SYSYA /HAhttp:hoge:fuga /HAftp:foo:bar http://www.sysya.net/ | ||
↑ | ||
HTTPには「hoge:fuga」、FTPには「foo:bar」という認証情報を用います。 HTTPからFTPへの移動が発生した際に、必要になる場合があります。 |
「/HA」のオプションを使用した場合、リクエストヘッダを標準出力(stdout)に出力する際には、
パスワードの部位は、アスタリスク記号(*)で隠して出力します。
ただし、「/D1」のオプションを併用し、
ヘッダは標準出力(stdout)に出力するがサーバーへの接続は行わない場合に限り、
パスワードの部位も、隠蔽処理無しでそのまま出力してしまいますので注意。
(「/D1」のオプションはデバッグ用に用意されている機能なので、こういう仕様になっています)
なお、ユーザー名及びアカウント情報は、常に隠蔽処理無しでそのまま出力します。
問題がある場合は、「/D0」のオプションで、
リクエストヘッダの標準出力(stdout)への出力を行わないようにして下さい。
サポートする認証方法は、デフォルトでは基本認証のみです。
「/HA」の直後にプラス記号(+)を追記することで、ダイジェストアクセス認証をサポートします。
(HTTPのみ、FTPは不可)
「ダイジェストアクセス認証」とは、パスワードを MD5 アルゴリズムで暗号化してサーバーへ送信するための取り決めです。
具体的には、まず、パスワード等の個人情報を送らずサーバーへ接続を試み、サーバーからのレスポンスを確認します。
「ダイジェストアクセス認証」のために必要な情報が含まれていれば、パスワードを暗号化して再接続を試みます。
(含まれていなければ、暗号化せずに再接続を試みます。これが「基本認証」)
「/HA+」のオプションを使用すると、ユーザー認証には常に2段階の手順を踏む事になります。
(実際に「ダイジェストアクセス認証」を行うかどうかに関わらず)
======== サンプルのトップ ======== | |
1→ | [C:\temp]sysya /ha+user:pass http://www.sysya.net/secret.html |
SYSYA:Connecting to [www.sysya.net:80]...done. | |
SYSYA:Send request header. | |
________ | |
HEAD /secret.html HTTP/1.0 | |
Host: www.sysya.net | |
2→ | |
~~~~~~~~ | |
SYSYA:Start receive process. | |
________ | |
HTTP/1.1 401 Unauthorized | |
Date: Fri, 30 Nov 2007 12:34:56 GMT | |
Connection: close | |
3→ | WWW-Authenticate: Digest realm="Password Required", nonce="********", algorithm=MD5, qop="auth" |
Content-type: text/html | |
~~~~~~~~ | |
SYSYA:Connection closed. | |
4→ | SYSYA.Warning:Authenication Required. |
SYSYA:Connecting to [www.sysya.net:80]...done. | |
SYSYA:Send request header. | |
________ | |
HEAD /secret.html HTTP/1.0 | |
Host: www.sysya.net | |
5→ | Authorization: Digest username="user", realm="Password Required", nonce="********", uri="/secret.html", algorithm=MD5, qop=auth, nc=00000001, cnonce="********", response="********" |
~~~~~~~~ | |
SYSYA:Start receive process. | |
________ | |
6→ | HTTP/1.1 200 OK |
Date: Fri, 30 Nov 2007 12:34:56 GMT | |
Authentication-Info: rspauth="********", cnonce="********", nc=00000001, qop=auth | |
Accept-Ranges: bytes | |
Content-Length: 1234 | |
Connection: close | |
Content-Type: text/html | |
~~~~~~~~ | |
SYSYA:Connection closed. | |
[C:\temp] | |
======== サンプルのボトム ======== |
1 | ··· | コマンドライン入力です。「/HA+」が追記されています。 |
2 | ··· | 1回目に送信されるリクエストヘッダには、個人情報は含まれていません。 |
3 | ··· | サーバーから「401(Unauthorized)」が返されました。この例では、レスポンスヘッダには、ダイジェストアクセス認証に必要な情報が含まれています。 |
4 | ··· | 再接続を行います。 |
5 | ··· | 2回目に送信されるリクエストヘッダには、個人情報が含まれています。この例では、MD5 による暗号化が行われています。 |
6 | ··· | 認証に成功しました。 |
このオプションは、「/MPOST」または「/MPUT」のオプションと併用した場合のみ意味を持ちます。
(「/MPOST」または「/MPUT」のオプションを指定していないと、無視します)
例: | ||
SYSYA /HZ"Cookie: USERID=13579;" http://www.sysya.net/ | ||
↑ | ||
クッキー「USERID」を定義 |
因みに、レスポンスヘッダに「Location:」の記述が含まれるケースは、
例えばそのURLアドレスのコンテンツが、別のURLアドレスに移転された場合が考えられます。
(その場合、レスポンスが 301(Moved Permanently) や 302(Moved Temporarily) 等になる)
なお、再接続を試みるのは、「Location:」のアドレスが HTTP/FTP である場合のみです。
例えば HTTPS だった場合は、そこで処理を中断します。
======== サンプルのトップ ======== | |
1→ | [C:\temp]sysya /j http://www.sysya.net/old.html |
SYSYA:Connecting to [www.sysya.net:80]...done. | |
SYSYA:Send request header. | |
________ | |
HEAD /old.html HTTP/1.0 | |
Host: www.sysya.net | |
~~~~~~~~ | |
SYSYA:Start receive process. | |
________ | |
HTTP/1.1 302 Moved Temporarily | |
Date: Sat, 31 Dec 2005 12:34:56 GMT | |
Connection: close | |
2→ | Location: http://www.sysya.net/new.html |
Content-type: text/html | |
~~~~~~~~ | |
SYSYA:Connection closed. | |
3→ | SYSYA.Information:The line of 'Locatiton:' was found. |
-> http://www.sysya.net/new.html | |
SYSYA:Connecting to [www.sysya.net:80]...done. | |
SYSYA:Send request header. | |
________ | |
HEAD /new.html HTTP/1.0 | |
Host: www.sysya.net | |
~~~~~~~~ | |
SYSYA:Start receive process. | |
________ | |
HTTP/1.1 200 OK | |
Date: Sat, 31 Dec 2005 12:34:56 GMT | |
Accept-Ranges: bytes | |
Content-Length: 1234 | |
Connection: close | |
Content-Type: text/html | |
~~~~~~~~ | |
SYSYA:Connection closed. | |
4→ | [C:\temp] |
======== サンプルのボトム ======== |
1 | ··· | コマンドライン入力です。「/J」が追記されています。 |
2 | ··· | レスポンスヘッダに「Location:」の記述が含まれています。 |
3 | ··· | 対象URLアドレスを「Location:」の物に変更し、再接続します。 |
4 | ··· | レスポンスヘッダに「Location:」の記述が含まれていないので、終了します。 |
なお、このオプションは、「/G」のオプションと併用時など、
エンティティボディ受信を指定している場合のみ意味を持ちます。
(エンティティボディ受信を指定していないと、無視します)
「/L」の後ろに、受信を認めるコンテンツタイプを指定する必要があります。
コンテンツタイプの末尾にアスタリスク(*)を付けると、それ以前の文字列が一致していれば、受信を許可するようになります。
コンテンツタイプ指定の直後にセミコロン(;)を挟んで、更に詳細な条件を指定できます(複数指定可)。
例えば、「/Ltext/html;charset=Shift-JIS」と記述すれば、コンテンツタイプがHTMLテキストであり、
且つ文字コードがシフトJIS(日本語)である場合のみ、受信を許可します。
「/L-」のオプションは、「/L」とは逆に、受信を認めないコンテンツタイプを指定する際に用います。記述ルールは、「/L」と同じです。
なお、「/L」と「/L-」を同時に指定する事はできません。
(コマンドラインの後で指定された方を優先します)
例: | ||
SYSYA /Ltext/* http://www.sysya.net/view.php?id=5678 | ||
↑ | ||
テキストデータであれば、受信を許可(例えば「text/html」) |
HEAD ··· レスポンスヘッダのみの返信
GET ··· レスポンスヘッダ及びコンテンツそのものの返信
POST ··· クライアントからサーバーへの通知
PUT ··· クライアントからサーバーへのファイルの送信
DELETE ··· サーバー上のファイルの削除
OPTIONS ··· サーバー側で受け付けるリクエストメソッド一覧を返信
TRACE ··· サーバーが受け取っているリクエストのループバック
FTPのURLアドレスに対しては、「/M」の後ろに、下記の何れかのリクエストメソッドを追記する必要があります。
LIST ··· ファイル/ディレクトリの情報一覧の返信
NLST ··· ファイル/ディレクトリの名前一覧の返信
GET ··· サーバーからクライアントへのファイルのダウンロード
PUT ··· クライアントからサーバーへのファイルのアップロード
APPEND ··· クライアントからサーバーへのファイルの追加アップロード
DELETE ··· サーバー上のファイルの削除
FTPのURLアドレスに対しては更に、上記のリクエストメソッドの後ろにカンマを挟んで、
テキストまたはバイナリの何れのモードでデータの送受信を行うのかを指定できます(省略可)。
ASCII ··· テキストモード
BINARY ··· バイナリモード(デフォルト)
なお、テキストモードにおける制御コード(改行など)の変換処理は、送信先であるFTPサーバーに委ねられます。
(SYSYA は「テキストモードを選ぶ」という事をFTPサーバーに通知するだけで、あとはバイナリモードと同じようにデータを転送する)
HTTPにおけるデフォルトのリクエストメソッドは「HEAD」です。
FTPにおけるデフォルトのリクエストメソッドは「LIST」です。
HTTP/FTPに固有のリクエストメソッドを、プロトコルの異なるURLアドレスに対して指定すると、エラーになります。
「HEAD」「LIST」「NLST」
そのURLアドレスに関する情報(更新時刻やサイズ等)だけを返信せよ、というリクエストです。
「GET」
そのURLアドレスのデータを返信せよ、というリクエストです。
Webブラウザ等にてWebページを表示する場合など、最も多く用いられるリクエストメソッドです。
(「/G」のオプションを指定した場合のデフォルトのリクエストメソッド)
「POST」
Webブラウザ等における、テキスト入力や、ボタンの押し下操作げ等の、通知に使われます。
(掲示板への書き込みやパスワード入力など)
「PUT」「APPEND」「DELETE」
Webページを直接メンテナンスするのに用います。
「HEAD」以外のリクエストメソッドを選択し、レスポンスにエンティティボディが含まれている場合、
デフォルトではそれを標準出力(stdout)に出力します。
ファイルに保存したい場合は、「/G」のオプションを併用して下さい。
逆に、「/MHEAD」オプションで明示的に「HEAD」のリクエストメソッドを選択した場合、「/G」のオプションの指定は無視されます。
(「HEAD」のリクエストでは、保存対象であるエンティティボディは戻されないので、「/G」のオプションを指定しても意味が無い)
「POST」「PUT」「APPEND」の何れかを選択した場合は、後述の
「/O」または「/P」のオプションを併用して、
送信するエンティティボディを定義する必要があります。
FTPのリクエストとHTTPのリクエストは、本来は名前も機能も異なりますが、
SYSYA においては、FTPのURLアドレスも、HTTPのように扱います。
(SYSYA がプロトコルの差異を吸収する)
FTPのURLアドレスに対して「GET」のリクエストを選択すると、
実際には「RETR」または「LIST」のリクエストが行われます(詳細は後述)。
同様に、「PUT」のリクエストを選択すると、実際には「STOR」のリクエストが行われます。
FTPのURLアドレスに対して「GET」のリクエストを選択した場合、実際に送られるリクエストは、対象がファイルかディレクトリかで異なります。
(ファイルなら「RETR」) (ディレクトリなら「LIST」)
なお、ファイルなのかディレクトリなのかは、URLアドレスの末尾が「/」かどうかで判定します。
FTPのURLアドレスに対して「PUT」または「APPEND」のリクエストを選択する場合、
コマンドラインオプションからファイル名が確定できなければなりません。
つまり、FTPサーバーにどんなファイル名でアップロードすれば良いのか、コマンドライン読みとれなければならない、という事です。
具体的には、下記の何れかの条件を満たしている必要があります。
FTPのURLアドレスに対して「DELETE」のリクエストメソッドを選択する場合、
そのURLアドレスがファイル名を含んでいる必要があります。
(具体的には、URLアドレスの末尾が「/」で終わってはいけない、という事)
(SYSYA は、ディレクトリを削除する機能を持っていない)
HTTPのURLアドレスに対しては、このような制限はありません。
(そのリクエストをどう処理するかは、サーバーに任せる)
PASV ··· サーバーに準備を要求する
PORT ··· ローカルマシン側で準備し、それをサーバーに通知する
BOTH ··· 「PASV」と「PORT」の両方を試す
デフォルトの準備方法は「BOTH」です。具体的には、まずはサーバー側に準備を要求します(PASV)。
それでエラーが返された場合、ローカルマシン側で準備し、それをサーバーに通知します(PORT)。
「PASV」または「PORT」を選択すると、何れか片側の手段しか行わなくなります。
「PASV」及び「PORT」は、FTP のコマンドの名前です。
「PASV」の場合、データポートをサーバー側で準備するので、ローカルマシンのネットワーク環境(ファイアウォールなど)に依存しないのが長所です。
ただし、サーバー側が「PASV」をサポートしている必要があります。
「PORT」の場合、データポートをローカルマシン側で準備するので、サーバーの仕様に依存しないのが長所です。
ただし、ローカルマシン側にファイアウォール等を導入していると、データポートのオープンが認められない場合があります。
「/O」は、ローカルディスク上にあるファイルをエンティティボディにします。
「/O」の後ろに、送信したいファイル名(1つのみ)を追記する必要があります。
ファイル名にアスタリスク1字(*)を指定すると、標準入力(stdin)を読み込みます。
(バイナリデータを含むファイルも送信可能)
「/P」は、コマンドライン上で直接エンティティボディを記述します。
「/P」の後ろに、送信したいエンティティボディを追記する必要があります。
この場合、エンティティボディは、コマンドライン上で記述可能なものに限られます。
(基本的に、バイナリデータや改行は含められない)
エンティティボディの送信の際には、標準出力(stdout)に出力したリクエストヘッダの直後に、送信状況を出力します。
(「**** 50%」←この様な物)
「/D0」のオプションを用いて、リクエストヘッダの標準出力を止めると、送信状況の出力も止まります。
「/O」及び「/P」のオプションは、エンティティボディの送信を伴うリクエストメソッドである、
「POST」「PUT」「APPEND」の何れかを選択している場合、必須です。
(逆に、何れのリクエストメソッドも選択していないと、無視します)
(リクエストメソッドの選択については、「/M」のオプションの解説を参照して下さい)
また、「/O」「/P」のオプションを同時に使用する事はできません。
(コマンドラインの後で記述された方を優先します)
FTPのURLアドレスに対して「/O」「/P」のオプションを用いる場合···つまり「PUT」または「APPEND」のリクエストを行う場合、
コマンドラインオプションからファイル名が確定できなければなりません。
(詳細は、「/M」のオプションの解説を参照して下さい)
HTTPのURLアドレスに対しては、このような制限はありません。
(そのリクエストをどう処理するかは、サーバーに任せる)
なお、HTTPのURLアドレスに対して、「POST」または「PUT」のリクエストを送信する際には、リクエストヘッダに
「Content-Type:」等の行を追記する必要がある場合が多いのですが、SYSYA は自動では追記しません。
必要に応じて、下記の例のように、「/HT」や「/HZ」等のオプションを併用し、手作業で追記してください。
例: | ||
SYSYA /MPUT /Oupdate.zip /HT"application/x-zip" /HZ"From: webmaster@www.sysya.net" /HA"username:password" http://www.sysya.net/update.zip | ||
↑ | ||
更新のために必要な情報を網羅して「update.zip」をアップロード |
なお、「/O」のオプションと「/G」のオプションを併用する場合は、注意が必要です。
上記の例のように、ローカルディスク上のファイル名と、アップロード先のファイル名が同じである場合、
「/G」のオプションによってエンティティボディが保存されるファイル名も同じ名前になり、
「File open failed」のエラーで、プログラムが異常終了します。
(オリジナルのファイルが上書きされる事はありません)
これを回避するには、「/G」のオプションの機能で、保存先のファイル名に、
明示的に別名を指定しなければなりません。
(例えば、「/Gupdate.log」など)
このオプションを、バッチファイル内で利用する場合は、例えばこんな記述になるでしょう。
例: | |
SYSYA /R http://www.sysya.net/ | |
IF ERRORLEVEL 300 GOTO ERROR | |
IF ERRORLEVEL 200 GOTO OK | |
GOTO ERROR |
受信が正常終了すると、レスポンスコード200台が戻される筈なので、300台以上が戻された場合は、エラー処理へ分岐させています。
また、戻り値以前の要素に起因するエラー(サーバーに接続できなかった場合など)は通常通りのエラーコード(前記「戻り値」の欄を参照)を返すので、
最後で200未満の値をエラー扱いにしています。
「/G」のオプションと併用時などに、エンティティボディ受信時に再試行が発生した場合は、
再試行の前後でレスポンスコードが異なる場合があります。
その場合は、基本的には最後に取得したレスポンスコードを戻り値にします。
例外的に、再試行前に 200(OK)、再試行後に 206(Partial Content) を戻してきた場合に限り、
再試行処理によって生じた後者は無視し、最初のレスポンスコード(200)を戻します。
対象URLアドレスがFTPの場合、コール&レスポンスの段取りが何度も行われますが、基本的には最後に戻されたレスポンスコードを戻り値にします。
(ただし最後の、ログアウト要求(QUIT)のレスポンスコードは無視する)
具体的には、通信処理が滞り無く完了したならば、226(Transfer complete)が戻されるでしょう。
0 | ··· | 何も出力しない。 |
1 | ··· | 再試行発生時/取得完了時のメッセージ「Retry」「saved」、
及びエンティティボディの受信状況を出力する。 (「**** 50%」←この様な物) |
2 | ··· | レスポンスヘッダを出力する。 |
3 | ··· | 両方出力する(デフォルト)。 |
なお、エンティティボディの受信状況の出力の設定は、「/G」のオプションと併用時など、
エンティティボディ受信を指定している場合のみ意味を持ちます。
(エンティティボディ受信を指定していないと、無視します)
あと、エンティティボディの出力先に標準出力(stdout)または標準エラー出力(stderr)を指定した場合は、
エンティティボディの受信状況等は出力しなくなります。
(明示的に「/S3」などと出力指定しても、無視します)
エンティティボディの受信状況は、約64Kバイト受信毎にアスタリスク記号(*)を連ねる形で表示します。
(エンティティボディのサイズが判明している場合は更にその後ろに、受信済みの比率をパーセント表示する)
ただしこの方式だと、大きなファイルを受信する場合に、画面がアスタリスク記号で埋め尽くされてしまいます。
それを避けたい場合は、「/S」の直後にプラス記号(+)を付けます。すると、受信状況の表示が1文字の簡単なアニメーションで表示されるようになります。
あと、回数に負の数を指定すると、無制限に再試行を行います。
(モラル的に多少問題がある機能なので、必ず人の管理下にある状況で指定してください···^^;)
なお、このオプションは、「/G」のオプションと併用時など、
エンティティボディ受信を指定している場合のみ意味を持ちます。
(エンティティボディ受信を指定していないと、無視します)
あと、「/G+」のオプションにより、
無条件のエンティティボディ保存が指示されている場合も、「/U」の指定は無視します。
======== サンプルのトップ ======== | |
[C:\temp]sysya /-v http://www.sysya.net/ | |
HEAD / HTTP/1.0 | |
Host: www.sysya.net | |
HTTP/1.1 200 OK | |
Date: Sat, 31 Dec 2005 12:34:56 GMT | |
Accept-Ranges: bytes | |
Content-Length: 1234 | |
Connection: close | |
Content-Type: text/html | |
[C:\temp] | |
======== サンプルのボトム ======== |
なお、エンティティボディの受信状況の表示を止めたい場合は、「/S」のオプションを併用して下さい。
なお、このオプションで設定するのは、あくまでも「レスポンスの待ち時間」であり、「接続の待ち時間」は対象外です。
たとえ「/-W」のオプションを指定していても、長時間サーバーとの接続が確立できなければ、処理を中断し、
プログラムは異常終了します(「Host not found.」のエラーなど)。
(接続の待ち時間は、設定できません)
「/X」のオプションを使用した場合、リクエストヘッダを標準出力(stdout)に出力する際には、パスワードの部位は、
アスタリスク記号(*)で隠して出力します。
ただし、「/D1」のオプションを併用し、
ヘッダは標準出力(stdout)に出力するがサーバーへの接続は行わない場合に限り、
パスワードの部位も、隠蔽処理無しでそのまま出力してしまいますので注意。
(「/D1」のオプションはデバッグ用に用意されている機能なので、こういう仕様になっています)
サポートする認証方法は、デフォルトでは基本認証のみです。
「/X」の直後にプラス記号(+)を追記することで、ダイジェストアクセス認証をサポートします。
認証方法の選択の仕様、および挙動の相違については、「/HA」のオプションの解説を参照して下さい。
なお、FTPのURLアドレスに対して指定できるプロキシは、HTTP/FTP 両対応のプロキシのみです。
(いわゆる「FTP over HTTP」のプロキシ)
プロキシを介してFTPのURLアドレスにアクセスする場合、ネットワーク間におけるやり取りは、HTTPとほぼ同じになります。
そのため、これまでのコマンドラインオプションの説明で、「※HTTP only」と注意書きされている機能も、
FTPのURLアドレスに対して使用可能になります。
(ただし、SYSYA が使用を禁じていないだけで、使用した結果がどうなるかは保証できません)
なお、FTP専用のプロキシを指定したい場合は、「/X」のオプションは使えません。
使いたい場合は、まずURLアドレスのホスト名の部位をプロキシのものに書き換えます。
更に「/HA」のオプションのユーザー名の部位の直後に、そのホスト名を追記します。
(詳細は、「/HA」のオプションの解説を参照して下さい)
リクエストヘッダやレスポンスヘッダ、各種メッセージ等の出力を抑制し、 そのURLアドレスのエンティティボディのみを、標準出力(stdout)に出力します。 他のコマンドラインツール(sedとかawkとかetc)と組み合わせて使うのに便利です。SYSYA /G /HU"Mozilla/5.0" http://www.sysya.net/
Mozillaの振りをして受信します。:-)SYSYA /Limage/jpg http://www.sysya.net/otakara.jpg
お宝画像のリンク先が、本当に画像ファイルかどうかチェックします。B-)