-LocalInputUrlFile/-RemoteInputUrlFile/-LocalOutputUrlFile/-RemoteOutputUrlFile オプションを使う事で、入力源/出力源をネットワーク上の Webサーバなどにする事ができる
[Local|Remote][Input|Output]UrlFile オプション
ローカルと呼称されている側のストリームの入力源にしたい場合は、「-LocalInputURLFile [URL]」
リモートと呼称されている側のストリームの入力源にしたい場合は、「-RemoteInputFile [URL]」
ローカルと呼称されている側のストリームの出力源にしたい場合は、「-LocalOutputURLFile [URL]」
リモートと呼称されている側のストリームの出力源にしたい場合は、「-RemoteOutputFile [URL]」
を使えばよい。
アップロードの仕様
「-LocalOutputURLFile/-RemoteOutputFile」は、出力先をネットワーク上のサーバに指定できるのだが、StreamRelay.NET.exeの仕様上、ストリームを開けっ放しにする必要があり、ネットワーク上のサーバに対して、そういう事はどうなんだろう(とは思いつつhttp/ftpの既定は開けっ放しなんですけど)、、、という事で、データは一時的に溜め込んでから(バッファリング)、ストリームのCloseイベントで、書き出す(ネットワーク上のサーバにアップロード)ようにする事ができる
そのためのオプションが
- tempFile
- tempMem
である。
全体的なオプション
全体的に SSL/TLS に対応している(https/ftps/smtps)に対応しているので、以下のオプションは共通
- CheckCert → サーバ側の証明書チェックを実施する
- CertFile=クライアント証明書
- CertPass=クライアント証明書のパスワード
http
System.Net.HttpWebRequest クラスを使っているだけ。
[URL] の書式は、
http[s]://user:pass@host:port/path?query#option&option...
という感じ
- Upload(-[Local|Remote]OutputURLFile)は、WebDAV (のようなもの)が既定。
- 既定のメソッドはPUT
- ストリームデータはHTTPリクエスト・ボディ
- 別途、header=translate:f を付けると完全にWebDAVになる
- Download(-[Local|Remote]InputURLFile)は、普通の HTTPクライアント
- 既定のメソッドはGET
- POST=[ファイル名]で、POSTデータを送信する事も可能
- ストリームデータはHTTPレスポンス・ボディ
以下はoption
- header=name:value → HTTP ヘッダの名前と値を追加する
- post=[postedFile] → ボディとなるファイル(ボディが必要なら、既定のメソッドはGET→POSTになる)
- ProxyCredential=[user:pass] → Proxy の認証情報
- Proxy=[host:port]
- ProxyCredentialusedefaultCredential → Windowsの認証情報を転用する
- UseDefaultCredential → Windowsの認証情報を転用する
- UseDefaultProxy → Windowsのプロキシ設定を転用する
- http10 → HTTP/1.0 を使う
- http11 → HTTP/1.1 を使う
- ContentType=[value] Content-Type 値を設定する
- AutoRedirect System.Net.WebRequetオブジェクトのAutoRedirectの値をTrueにする
- Method=[POST|GET|HEAD|OPTIONS|PUT|DELETE|TRACE] → HTTPメソッドを明示する(既定は「GET」だが、OutputURLFileの場合は「PUT」でボディがストリームデータとなる)
- tempFile → アップロード時、一時ファイルをディスクに作成する
- tempMem → アップロード時、一時ファイルを作成しない(メモリ[System.IO.MemoryStream]上に保持する)
WebDAVとしてアップロードする事も可能
例えば、
StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt -RemoteOutputURLFile http://user:pass@www.example.com/share/a.txt#header=translate:f
とすると、ローカルのa.txtをWebDAVサーバ http://www.example.com/share/ へアップロードする事ができる
ftp
System.Net.FtpWebRequest クラスを使っているだけ。
[URL] の書式は、
ftp[s]://user:pass@host:port/path#option&option...
という感じ
以下はoption
- PASV → PASVモードで実施する
- tempFile → アップロード時、一時ファイルをディスクに作成する
- tempMem → アップロード時、一時ファイルを作成しない(メモリ[System.IO.MemoryStream]上に保持する)
mailto スキーム
System.Net.Mail.SmtpClient クラスを使っているだけ。
アップロード(LocalOutputFile/RemoteOutputFile)のみ
こちらの既定はバッファリング(サーバへの接続はデータが溜まってから)です。
データ(ストリームデータ)は、メール本文として送信されます。
[URL] の書式は、
mailto[s]:sendaddress?Option&Option...
という感じ
以下はoption
- Server=[SmtpServerHost:port]
- Subject=[Title]
- fromAddress=[MailAddress]
ここまでは必須
さらに
- toAddress=[MailAddress]
- ccAddress=[MailAddress]
- bccAddress=[MailAddress]
- Sender=[MailAddress]
- ReplyTo=[MailAddress]
- User=[SmtpAuthUser] → SMTP認証のユーザ名
- Pass=[SmtpAuthPassword] → SMTP認証のパスワード
- SSL → SMTPS を使う
- DataCharset=[CharsetName] (default=Encoding.Default)
- MailCharset=文字コード名 → 既定はiso-2022-jp
- MailBodyCharset=文字コード名 → 既定はiso-2022-jp
- MailSubjectCharset=文字コード名 → 既定はiso-2022-jp
- NewStyle → UTF-8 の現代的スタイルで送信する
mailto スキームの制限
- SSL というのは、STARTTLS
- 認証は、AUTH LOGIN のみのようです {SMTP認証でメールを送信する - .NET Tips (VB.NET,C#...)}
- なんか、エラー(例外)のキャッチがうまく行かない場合があるんですよね
file スキーム
System.Net.FileWebRequest クラスを使っているだけ。
URL は
file:///ドライブ:/パス/ファイル名
な感じ。
ただ、絶対パスになるので、別途、-LocalOutputFile とか -RemoteOutputFile オプションに比べると、利点は特にない。
webGetter.jar
もっと高機能なものは別途、作った。↓
curl のような wget のような httping のようなウェブクライアント webGetter.jar
sendmail.net.exe
高機能かどうか分からんが、専用のコマンドを作った。
BlatJ.exeのようなsendmailのようなメール送信するCLIコマンド sendmail.net.exe
代理認証
SMTP認証を代替するStreamRelay.NET.exe