68user's page 掲示板

Prev< No. 1459〜1461> Next  [最新発言に戻る] [過去ログ一覧]
No. 1459 # M.K 2000/12/13 (水) 18:45:39
はじめまして。
crontabで毎日12:00にabcというスクリプトを
起動するといった設定を現在しているんですが、
これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させるっていう
方法はあるんでしょうか?
教えていただきたく。

No. 1460 # 辻 義一 [E-mail] 2000/12/13 (水) 18:54:11
初めまして、辻 です。

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;
}
今のところ、このようなコードを書いています。

No. 1461 # 68user 2000/12/14 (木) 02:38:32
@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
だけでは正確には判断できません。

Prev< No. 1459〜1461> Next  [最新発言に戻る] [過去ログ一覧]