Inetを使わずHTTPファイルを取得するには?

解決


Redtrans  2003-07-17 00:21:34  No: 78653

Visual Basic 6.0を使用しております。
他端末(要求先)においてあるログファイルをローカル(要求元)にもってこようというプログラムを書いています。Inetを使用しないでできますでしょうか。

"http://(要求先端末名)/log/(ログファイル).log" からログ内容を取得し、
クライアントの決められた場所に保存をしたいです。(イメージ的にはローカルにコピー)

■主な処理の内容
要求元は、要求先のURLからログファイルを取得する。

分かる方いらっしゃいましたら、どうレス&アドバイスをお願いいたします。


魔界の仮面弁士  2003-07-17 00:53:22  No: 78654

# httpファイル?

> Inetを使用しないでできますでしょうか。

・Winsockコントロールを利用できます。低レベル通信になりますけれども。
・(IIS5等の)Webフォルダを利用できるなら、FileCopy等で保存できます。
・XMLHTTPオブジェクトを利用する方法もあります。SSLにも対応可能です。
・WebBrowserコントロールで受けて、IPersistFile.Saveする事もできます。
・(BASP21 DLLなどの)フリーのコンポーネントを利用するのも良いかも。
・あるいは、(GrapeCity社のiNetTransferなどの)市販コンポーネントとか。


Redtrans  2003-07-17 01:11:34  No: 78655

魔界の仮面弁士さん早期レスありがとうございます。

> # httpファイル?
直接ファイルを参照するのが一番早いことなのですが、要求先の端末は
パスワードが設定している為、要求元はログインしなければなりません。
ログイン方法をとらないで、データを参照できるように"http:"でデータを
取得するという方法を考えました。

要求先(言い方がおかしかったですね。参照先と変えさせていただきます)は、Winsockなどの通信するためのEXEはおかないつもりです。
フリー・市販のコンポーネントは使用せずにInet以外にもデータを取得する方法が
あると聞いたのですが、いまいち分かりませんでした。

■処理を細かく書きます。
1.ローカル端末は、サーバ端末においてあるログファイルを見に行く。
2.サーバ端末からログファイルを、ローカル端末にダウンロードさせる。
3.ローカル端末に保存したログファイルを参照し、展開する。

※サーバ端末には、VB.EXE等をおかないでやろうとしています。

追加質問となってしまいましたが、どうぞ宜しくお願いします。


魔界の仮面弁士  2003-07-17 03:03:45  No: 78656

件名にある「HTTPファイルを取得する」というのは
「HTTPでファイルを取得する」という意味なのでしょうか?
# httpは、プロトコルとかスキームなどを表す言葉であって、
# ファイルの種類を示す言葉ではありませんよね。

> ログイン方法をとらないで、データを参照できるように
ところで、httpで通信するとして、その際にログインは不要なのでしょうか?
システムとして必要であれば、BASIC認証などを併用させる事もできますよ。

> 要求先(言い方がおかしかったですね。参照先と変えさせていただきます)は、
> Winsockなどの通信するためのEXEはおかないつもりです。
exeをおく必要は無いと思いますが、httpで通信する以上、最低限、
Webサーバ(IISとかApacheとか)だけは必要になりますね。
また、サーバへのアクセス権限も適切に施す必要があるでしょう。

> フリー・市販のコンポーネントは使用せずにInet以外にもデータを取得する方法が
> あると聞いたのですが、いまいち分かりませんでした。
これについては、先の回答を参照してください。いろいろな方法が考えられます。
あるいは、ソケット系のAPIなどを使ってやりとりする事もできますね。

> 1.ローカル端末は、サーバ端末においてあるログファイルを見に行く。
サーバ側がWebフォルダ(というかWebDAV)に対応しているのであれば、
メモ帳などで、直接「http://〜〜〜/〜〜/aaaa.log」などというURLを開けますよ

> 2.サーバ端末からログファイルを、ローカル端末にダウンロードさせる。
これについては、先に回答した方法などでどうぞ。
そちらの環境の問題などもあるでしょうから、どれが適しているかは、
実際に調査&試して見た上で判断してみてください。

> ※サーバ端末には、VB.EXE等をおかないでやろうとしています。
今回はその必要は無いと思いますよ。


Redtrans  2003-07-17 20:49:54  No: 78657

魔界の仮面弁士追加レス有難うございました。

Inetのコンポーネントを使用しないで作ろうと思ったのは、
VB開発環境が入ってないマシンから取得処理を行いたかったので
使わない方法で考えましたが、Wininet.dll を使用できそうなので
取得処理を書いてみようと思います。

今回レスをいただいた内容でも調査してみたいと思います。
参考になりました、ありがとうございました。

また分からないことがあったら質問させていただきますが、
そのときはどうぞ宜しくお願いします。


Redtrans  2003-07-17 20:51:42  No: 78658

> 魔界の仮面弁士追加レス有難うございました。
コピーアンドペーストでHNを貼り付けてしまったため、「さん」づけを
するのを忘れてしまいました。魔界の仮面弁士さん有難うございました。


魔界の仮面弁士  2003-07-17 21:49:17  No: 78659

ちなみに、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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加