OZの部屋

なんでも日記です

wgetでpost ログイン認証 とpostダウンロード

2006-10-23 22:32:34 | プログラム
wgetで GETでダウンロードするのはとっても簡単ですが、
POSTの場合一ひねり、さらに認証してセッションを張っているような場合は
また一ひねり必要です。

VANで発注していたものが、最近はインターネットEDIにつぎつぎ変わってきています。
モデムでピーガーして接続ダウンロードしていたものがインターネット経由になってきているのですが、自動ダウンロードするにはBacrexというツールを使うというのが一般的らしい。もちろん違うのもたくさんあると思うけど。

Bacrex でダウンロード、アップロードしているけど
貧乏会社はそんなものに金を使う余裕がない。
というか、Bacrexて使いにくそうなので、WGETで
ダウンロード、アップロードをやってみることにする。
ダウンロードは割りとすぐ出来たけど、アップロードはちと手こずったよ。

ということで、ここから本題

つかうのはWin版のWGET と perl

wget のバージョン===== 1.10.2b
windows バイナリをダウンロード
http://www.gnu.org/software/wget/wget.html 
http://xoomer.alice.it/hherold/

環境変数Pathにwgetインストールフォルダを追加しておいたほうがいいと思う。

perl は v5.8.8 binary build 819

POSTダウンロードの前に、
(通常POSTでダウンロードするような場合はユーザー認証がある場合が多いと思う)

■そこで、まずはログイン認証画面でポスト
ユーザー名テキストオブジェクト i_UserID
パスワードテキストオブジェクト i_PassWd
でボタンを押してサブミットするような認証画面のとき


プロキシの設定はrcまたは環境変数でのみ設定可能
コマンドラインからは設定できない。

#ログインwgetコマンド ヘッダも一緒にファイルにする
#ログインすることでセッションキーをクッキーで受け取る
# パラメータ補足
# --save-headers ヘッダも一緒に出力する
# --tries リトライ回数
# --timeout タイムアウト 秒
# -O filename 出力ファイル名
# --no-cache キャッシュ無効(常に最新のデータをダウンロードする)
# --no-check-certificate 証明書の確認をしない
# --post-data string post要求する string=フォームオブジェクトの値
# 2>&1 エラー出力を標準出力にリダイレクト
$cmd="wget --save-headers --tries=2 --timeout=4 -O $loginhtml --no-cache --no-check-certificate --post-data "i_UserId=$loginuser&i_PassWd=$loginpasswd&txtLogin=01" $loginurl 2>&1";

ログイン画面がHTTPSなので証明書関係のオプションを付けている

perlでドライブしているのでこのコマンドを実行するときは
@output=`$cmd`;
$cmdstat=$?;
こんな感じでエラー出力も標準出力にリダイレクトして使っている


実行した結果サーバーから返される内容は
$loginhtml 出力ファイルにヘッダー付で結果がダウンロードされる。
普通はこのヘッダにセッションキーがクッキーとして入っているはず


実際に実行したとき出力ファイルの先頭部分に入っていたヘッダ部

例)
HTTP/1.1 200 OK
Date: Wed, 18 Oct 2006 06:59:29 GMT
Server: Oracle-Application-Server-10g/9.0.4.1.0 Oracle-HTTP-Server
Content-Length: 821
Pragma: no-cache
Cache-Control: no-cache
Set-Cookie: BCODE001=116570784582056396001804;path=/
Set-Cookie: BCODE002=;path=/
Set-Cookie: BCODE003=;path=/
Set-Cookie: BCODE004=;path=/
Connection: close
Content-Type: text/html
***** ここまで ********
こんな感じで入っているはず
実際のダウンロードでこのクッキーを使う

出力されたHTMLファイルを読み込んでヘッダ部のクッキーを取り出す
#ヘッダのクッキーを連想配列%cookiesに保存する
if(/^Set-Cookie:[ ]*([^ =]+)=([^;=]*);/){
$cookies{$1}=$2;
}
■post でダウンロードする
ダウンロードコマンドは次の通り、クッキー部分のヘッダはあとで書き換える
$replace01='<!01!>';
$downloadstr="wget --tries=2 --timeout=4 -O $dlfile --no-cache --no-check-certificate --header "$replace01" --post-data "$dlformpara" $dlurl 2>&1";

ログイン時に拾ってきたクッキーにダウンロード時に必要なクッキーを追加または書き換えてやる。
このクッキーをダウンロードするときのヘッダーに付けてやる。
#ダウンロードのためのクッキー
#この値はブラウザなどで調べる
($cookie03,$cookie03val)=('BCODE003','2162');
$cookies{$cookie03}=$cookie03val;
#すべてのクッキーをヘッダー用に作成する
$cookiestr='Cookie: ';
foreach $key (sort(keys(%cookies))){
$cookiestr.="$key=$cookies{$key};";
}
$cookiestr=~s/;$//;

#コマンドラインのヘッダーにいれるクッキーを書き換える
$downloadstr=~s/$replace01/$cookiestr/;

コマンド実行
@cmdout=`$downloadstr`;
$cmdstat=$?;
foreach $line (@cmdout){chop($line);&logwrite($line);}

&logwrite() はログに書き出すサブルーチンです。

これでめでたしめでたし ダウンロードできました。

それと、実際には、エラー処理など工夫が必要です。


オズオズはこのダウンロードスクリプトをMSSQLServer2000のジョブにして定時実行にしています。


この動作を実現するためのデバッグツールでいいのを見つけました。
あとで紹介します。


最新の画像もっと見る

6 コメント

コメント日が  古い順  |   新しい順
hervelegerdress@outlook.com (herve leger bandage dress)
2020-02-24 23:39:38
https://my.desktopnexus.com/legerdresses/journal/herve-leger-things-24742/
https://justpaste.it/349yj
http://bit.do/fqVTt
http://bit.do/fqVTF
http://bit.do/fqVTS
http://tiny.cc/mxwbjz
http://tiny.cc/5xwbjz
https://justpaste.it/2cl85
https://justpaste.it/4fmkv
http://site-2235565-7576-4011.mystrikingly.com/blog/herve-leger-story
http://tiny.cc/b0wbjz
http://tiny.cc/50wbjz
http://tiny.cc/bzwbjz
http://bit.do/fqV5g
http://bit.do/fqV5j
http://bit.do/fqV5k
https://tinyurl.com/uhb7ezd
http://bit.do/fqV4o
http://tiny.cc/p3wbjz
http://bit.do/fqVYa
http://bit.do/fqVYr
http://bit.do/fqVYN
https://tinyurl.com/wm485of
http://site-2235565-7576-4011.mystrikingly.com/blog/herve-leger-history
http://tiny.cc/3zwbjz
http://bit.do/fqVZn
http://bit.do/fqVZH
http://bit.do/fqVZQ
http://bit.do/fqV5c
http://site-2235565-7576-4011.mystrikingly.com/blog/herve-leger-things
http://bit.do/fqVQP
http://bit.do/fqVRx
http://bit.do/fqVRS
http://bit.do/fqVS2
http://tiny.cc/rywbjz
http://bit.do/fqV4s
http://bit.do/fqV4w
http://bit.do/fqV4C
返信する
Actual news about drug. (Larrysoofe)
2020-12-21 18:21:34
Drug information for patients. What side effects can this medication cause?
order generic cymbalta online
All information about drugs. Get information here.
返信する
Everything what you want to know about drugs. (DaDmkn)
2021-01-15 21:05:32
Medicament prescribing information. Cautions.
zantac cost https://zantac4u.top in US
Actual information about medicines. Read now.
返信する
Everything about medicines. (Larrysoofe)
2021-01-17 14:18:37
Drugs information sheet. Brand names.
how to buy valtrex
Some news about medicament. Read now.
返信する
generic cialis 2018 fhbfsabolthdLORCEBtjOvapsd (Fgsdfliew)
2021-03-03 15:27:05
when to take cialis for best results cialis 20mg cialis active ingredient
返信する
Replica Watches (Replica Watches)
2021-12-31 20:58:07
https://orologimeccanici.doorblog.jp/archives/11692388.html
https://is.gd/fqOQQR
https://is.gd/r1ZEOZ
https://is.gd/IFVw3L
https://is.gd/4uJGul
https://is.gd/0tVoGA
https://is.gd/Qmm7l8
https://www.vingle.net/posts/4087123
https://bit.ly/30rMKxz
https://bit.ly/3HrfJCk
https://bit.ly/30ufgyC
https://bit.ly/3CmDE1G
https://bit.ly/3wPJ5oO
https://www.vingle.net/posts/4087134
https://tinyurl.com/7nzz6zc5
https://tinyurl.com/5h7z4af4
https://tinyurl.com/5dezmr6a
https://bit.ly/3ClrJBi
https://tinyurl.com/298k5a3w
https://www.vingle.net/posts/4087141
http://tiny.cc/83pluz
http://tiny.cc/93pluz
http://tiny.cc/a3pluz
http://tiny.cc/b3pluz
http://tiny.cc/c3pluz
http://tiny.cc/d3pluz
https://wakelet.com/wake/7Fki8TMGZPt2VhKA9Z6-U
https://wakelet.com/wake/SAuy6AMGo4f_Z0yalHjSL
https://rebrand.ly/bb3hkfw
https://rebrand.ly/l1nmpeu
https://rebrand.ly/wsqh04w
https://rebrand.ly/85hketh
https://rebrand.ly/z0usxf8
https://rebrand.ly/8uwrjsb
返信する