Visual Basic 6.0を使用しております。
他端末(要求先)においてあるログファイルをローカル(要求元)にもってこようというプログラムを書いています。Inetを使用しないでできますでしょうか。
"http://(要求先端末名)/log/(ログファイル).log" からログ内容を取得し、
クライアントの決められた場所に保存をしたいです。(イメージ的にはローカルにコピー)
■主な処理の内容
要求元は、要求先のURLからログファイルを取得する。
分かる方いらっしゃいましたら、どうレス&アドバイスをお願いいたします。
# httpファイル?
> Inetを使用しないでできますでしょうか。
・Winsockコントロールを利用できます。低レベル通信になりますけれども。
・(IIS5等の)Webフォルダを利用できるなら、FileCopy等で保存できます。
・XMLHTTPオブジェクトを利用する方法もあります。SSLにも対応可能です。
・WebBrowserコントロールで受けて、IPersistFile.Saveする事もできます。
・(BASP21 DLLなどの)フリーのコンポーネントを利用するのも良いかも。
・あるいは、(GrapeCity社のiNetTransferなどの)市販コンポーネントとか。
魔界の仮面弁士さん早期レスありがとうございます。
> # httpファイル?
直接ファイルを参照するのが一番早いことなのですが、要求先の端末は
パスワードが設定している為、要求元はログインしなければなりません。
ログイン方法をとらないで、データを参照できるように"http:"でデータを
取得するという方法を考えました。
要求先(言い方がおかしかったですね。参照先と変えさせていただきます)は、Winsockなどの通信するためのEXEはおかないつもりです。
フリー・市販のコンポーネントは使用せずにInet以外にもデータを取得する方法が
あると聞いたのですが、いまいち分かりませんでした。
■処理を細かく書きます。
1.ローカル端末は、サーバ端末においてあるログファイルを見に行く。
2.サーバ端末からログファイルを、ローカル端末にダウンロードさせる。
3.ローカル端末に保存したログファイルを参照し、展開する。
※サーバ端末には、VB.EXE等をおかないでやろうとしています。
追加質問となってしまいましたが、どうぞ宜しくお願いします。
件名にある「HTTPファイルを取得する」というのは
「HTTPでファイルを取得する」という意味なのでしょうか?
# httpは、プロトコルとかスキームなどを表す言葉であって、
# ファイルの種類を示す言葉ではありませんよね。
> ログイン方法をとらないで、データを参照できるように
ところで、httpで通信するとして、その際にログインは不要なのでしょうか?
システムとして必要であれば、BASIC認証などを併用させる事もできますよ。
> 要求先(言い方がおかしかったですね。参照先と変えさせていただきます)は、
> Winsockなどの通信するためのEXEはおかないつもりです。
exeをおく必要は無いと思いますが、httpで通信する以上、最低限、
Webサーバ(IISとかApacheとか)だけは必要になりますね。
また、サーバへのアクセス権限も適切に施す必要があるでしょう。
> フリー・市販のコンポーネントは使用せずにInet以外にもデータを取得する方法が
> あると聞いたのですが、いまいち分かりませんでした。
これについては、先の回答を参照してください。いろいろな方法が考えられます。
あるいは、ソケット系のAPIなどを使ってやりとりする事もできますね。
> 1.ローカル端末は、サーバ端末においてあるログファイルを見に行く。
サーバ側がWebフォルダ(というかWebDAV)に対応しているのであれば、
メモ帳などで、直接「http://〜〜〜/〜〜/aaaa.log」などというURLを開けますよ。
> 2.サーバ端末からログファイルを、ローカル端末にダウンロードさせる。
これについては、先に回答した方法などでどうぞ。
そちらの環境の問題などもあるでしょうから、どれが適しているかは、
実際に調査&試して見た上で判断してみてください。
> ※サーバ端末には、VB.EXE等をおかないでやろうとしています。
今回はその必要は無いと思いますよ。
魔界の仮面弁士追加レス有難うございました。
Inetのコンポーネントを使用しないで作ろうと思ったのは、
VB開発環境が入ってないマシンから取得処理を行いたかったので
使わない方法で考えましたが、Wininet.dll を使用できそうなので
取得処理を書いてみようと思います。
今回レスをいただいた内容でも調査してみたいと思います。
参考になりました、ありがとうございました。
また分からないことがあったら質問させていただきますが、
そのときはどうぞ宜しくお願いします。
> 魔界の仮面弁士追加レス有難うございました。
コピーアンドペーストでHNを貼り付けてしまったため、「さん」づけを
するのを忘れてしまいました。魔界の仮面弁士さん有難うございました。
ちなみに、XMLHTTPで行う場合はこんな感じです。
以下のテキストを、「Sample.vbs」というファイル名で保存し、
それをダブルクリックしてみてください。この掲示板の内容が、
「C:\Sample.dat」として保存されます。
# とりあえず、VBの入っていない環境でも動かしやすいように、
# VBScriptで書いて見ましたが、VBに移植するのは容易いですよね。
'=================
Option Explicit
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim Xfer
Dim Url
Dim File
Dim FileName
Url = "http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200307/03070040.txt"
FileName = "C:\Sample.dat"
Set Xfer = Nothing
Set File = CreateObject("ADODB.Stream")
On Error Resume Next
Set Xfer = CreateObject("Msxml2.XMLHTTP")
If Xfer Is Nothing Then
Set Xfer = CreateObject("Microsoft.XMLHTTP")
End If
Xfer.Open "GET", Url, False
Xfer.Send
File.Type = adTypeBinary
File.Open
File.Write Xfer.responseBody
File.SaveToFile FileName, adSaveCreateOverWrite
File.Close
Set File = Nothing
Set Xfer = Nothing
MsgBox "保存完了です。", vbInformation
ツイート | ![]() |