|
はじめまして。 crontabで毎日12:00にabcというスクリプトを 起動するといった設定を現在しているんですが、 これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させるっていう 方法はあるんでしょうか? 教えていただきたく。 |
|
初めまして、辻 です。 HTTPでGETするプログラムを作成しています。HTTP クライアントを作ってみよう(4) を参考にさせていただいて、URLのエンコードしようとしています。 で、 /~user/hoge.cgi?fuga=ABC!"$ DEF+ が /%7euser/hoge.cgi?fuga%3DABC%21%22%5C%24+DEF%20 と書かれています。自分で作ったプログラムで確かめてみると、 /%7euser/hoge.cgi?fuga%3dABC%21%22%24+DEF%2b となりました。 また、URLのエンコードの対象はURL全てですか?それとも、CGIとかで使われる、?の後ろのみなのでしょうか?~が含まれるので、そんなことはないでしょうが。?そのものは、対象にならないようですし、ファイル名に@等がついてたりしたらどうなるのでしょうか? ちなみに、 string yHttpGet::UrlEncode(string url) { char buff[10]; for(int i=0; i<url.length(); i++) { char c = url.at(i); if(((c <'0') || ('9' < c)) && ((c < 'a') || ('z' < c)) && ((c < 'A') || ('Z' < c)) && ('/' != c) && ('?' != c) && (' ' != c) && ('_' != c) && ('-' != c) && ('.' != c) && ('*' != c)) { sprintf(buff, "%%%02x", c); url.replace(i, 1, buff); } else if(c == ' ') { url.replace(i, 1, "+"); } } return url; } 今のところ、このようなコードを書いています。 |
|
@1458 masa さん > UNIXでsendmailを使ってメールを送信するスクリプトをPerlで作ろうと > 思っているのですが、添付ファイルを付けることは可能なのでしょうか? モジュールが使えるなら http://www.parkcity.ne.jp/~chaichan/qanda/qa425.htm?00-12-13-19-49 で、ふじさんが述べておられる方法がお勧めです。 @1459 M.K さん > これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させる > っていう方法はあるんでしょうか? 少なくとも FreeBSD の crontab では、それを実現する簡単な 方法はありません。 金曜日の 11:00 毎日 12:00 という二つのエントリを作って、スクリプト内で 最終金曜日で12時台なら、処理終了 金曜日 && 最終金曜日でない && 11時台なら、処理終了 とするのがいいでしょう。 試してませんが、*BSD や GNU の date なら、 date +%m … 現在の月を求める date -v+7d +%m … 一週間後の月を求める を利用して 0 11 * * 5 [ `date +%m`!=`date -v+7d +%m` ] && run-script 0 12 * * * [ `date +%w'!='5' -o `date +%m`!=`date -v+7d +%m` ) ] && run-script てなことが可能かもしれません (条件合ってるかな?)。 @1460 辻さん foo.cgi?.... という GET 形式は、? 以降の文字が QUERY_STRING (疑問符文字列) という名前で取り出せることからわかるように、 ? はエンコードする必要はありません。疑問符であることが重要なのです。 > URLのエンコードの対象はURL全てですか? 全て、というかパス (/~user...) も含めてエンコードが必要です。 ただし、引数を渡したい場合は ? はエンコードしません。 でなくて、ファイル名の一部に ? が含まれる場合は エンコードが必要です。 この掲示板の上にある発言フォームから文字を入力すると、 Name … 68user Email … 68user@X68000.startshop.co.jp Message … ほげほげ というような、対応関係が生まれます。このようなフォームで 生成されたデータを POST で送るとき、クライアントは application/x-www-form-urlencoded という mime type で 送信しなければいけません。「HTTP クライアントを作ってみよう」 では手抜きして送ってませんが、本来は送るべきです。 で、GET の場合も同様に x-www-form-urlencoded 形式ならば ?foo=bar は ?foo=bar でよいです。= は URL エンコードしません。 しかし、そうではなく 「foo=bar」という引数を渡したいのなら ?foo%3Dbar となります。 というふうに、本当は /~user/hoge.cgi?fuga=ABC!"$ DEF+ という例だけでは、どこをエンコードすべきかは明確には なりません。なので、あの解説はあまりよろしくないですね。 例えば hoge.cgi?foo=bar&def=ghi は、フォームに foo、 bar という要素があるならこのまま送ればよいですが、 foo=「bar&def=ghi」という意味なら foo=bar%26def%3Dghi」 とすべきです。どちらなのかは hoge.cgi?foo=bar&def=ghi だけでは正確には判断できません。 |