OZの部屋
なんでも日記です
 



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のジョブにして定時実行にしています。


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


コメント ( 5 ) | Trackback ( 0 )



« さくら LWP HTTPS PRO... »
 
コメント
 
 
 
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
 
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。
数字4桁を入力し、投稿ボタンを押してください。