NonSoft

WEBやFTPでファイルをダウンロードする
サンプル(VB.NET)


 サンプル(ソース/コード)
WebRequestとWebResponseによるWEBダウンロードのサンプルソース(VB.NET)と、
FtpWebRequestとWebResponseによるFTPダウンロードのサンプルソース(VB.NET)です。

WebRequestとFtpWebRequestは使い方が殆ど同じなのでソースコードの流用が可能です。

1.WEBダウンロードのサンプル(VB.NET) WEBダウンロードのサンプル(C#.NET)
2.FTPダウンロードのサンプル(VB.NET) FTPダウンロードのサンプル(C#.NET)

関連サンプル:WIN32APIによるFTP(File Transfer Protocol)送受信のサンプル(VB.NET)
関連サンプル:WIN32APIによるFTP(File Transfer Protocol)送受信のサンプル(VB6)
関連サンプル:BASP21によるFTPアップロード/ダウンロードのサンプル(VBS/VBA)
関連ツール :FTPで差分アップロード/差分ダウンロードするツール
関連ツール :FTP対応のフォルダ同期ツール(フォルダ監視人)

★WEBダウンロード(Form1.vb)
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

    ' WEBファイルのダウンロード
    Dim dat As Byte() = GetWebFile("http://xxx.xxx.com/xxx.html")

End Sub 

' WEBファイルのダウンロード
Private Function GetWebFile(ByVal url As String) As Byte()
    Dim st As System.IO.Stream = Nothing
    Dim rs As System.Net.WebResponse = Nothing
    Try
        Dim url_uri As New Uri(url)
        Dim dat As Byte() = New Byte(-1) {}

        Dim rq As System.Net.WebRequest = _
            CType(System.Net.WebRequest.Create(url), _
            System.Net.HttpWebRequest)

        ' HTTP圧縮(GZIP)への対応-------------------------
        ' CType(rq, System.Net.HttpWebRequest).AutomaticDecompression = _
        '     System.Net.DecompressionMethods.GZip
        ' -----------------------------------------------

        ' ブラウザの種類の設定
        CType(rq, System.Net.HttpWebRequest).UserAgent = _
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)"
        ' 使用言語の設定
        CType(rq, System.Net.HttpWebRequest).Headers.Add( _
            "Accept-Language", "ja")
        ' FTPサーバーへ接続
        rs = rq.GetResponse()
        ' ダウンロード開始
        st = rs.GetResponseStream()

        Dim bytes As Byte()
        Dim ttlSiz As Integer = 0
        Dim oneSiz As Integer
        Do
            ReDim bytes((1024 * 100) - 1)
            oneSiz = st.Read(bytes, 0, bytes.Length)
            If oneSiz > 0 Then
                ReDim Preserve dat(ttlSiz + oneSiz - 1)
                If oneSiz <> bytes.Length Then
                    ReDim Preserve bytes(oneSiz - 1)
                End If
                bytes.CopyTo(dat, ttlSiz)
                ttlSiz = ttlSiz + oneSiz
            End If
        Loop While (oneSiz > 0)

        Return dat
    Catch ex As Exception
        Throw ex
    Finally
        If st Is Nothing = False Then
            st.Close()
            st = Nothing
        End If
        If rs Is Nothing = False Then
            rs.Close()
            rs = Nothing
        End If
    End Try
End Function

★FTPダウンロード(Form1.vb)
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

    ' FTPファイルのダウンロード
    Dim dat As Byte() = GetFtpFile("ftp://xxx.xxx.com/xxx.txt")

End Sub

' FTPファイルのダウンロード
Private Function GetFtpFile(ByVal url As String) As Byte()
    Dim st As System.IO.Stream = Nothing
    Dim rs As System.Net.WebResponse = Nothing
    Try
        Dim url_uri As New Uri(url)
        Dim dat As Byte() = New Byte(-1) {}

        Dim rq As System.Net.FtpWebRequest = _
            CType(System.Net.FtpWebRequest.Create(url), _
            System.Net.FtpWebRequest)

        ' ユーザとパスワードの設定
        rq.Credentials = _
            New System.Net.NetworkCredential( _
            "hf524137 ", "vh2dg7G6")
        ' ファイルのダウンロード指定
        rq.Method = _
            System.Net.WebRequestMethods.Ftp.DownloadFile
        ' KeepAliveの設定
        rq.KeepAlive = False
        ' バイナリ・モードの設定
        rq.UseBinary = True
        ' パッシブ・モードの設定
        rq.UsePassive = False
        ' FTPサーバーへ接続
        rs = rq.GetResponse()
        ' ダウンロード開始
        st = rs.GetResponseStream()

        Dim bytes As Byte()
        Dim ttlSiz As Integer = 0
        Dim oneSiz As Integer
        Do
            ReDim bytes((1024 * 100) - 1)
            oneSiz = st.Read(bytes, 0, bytes.Length)
            If oneSiz > 0 Then
                ReDim Preserve dat(ttlSiz + oneSiz - 1)
                If oneSiz <> bytes.Length Then
                    ReDim Preserve bytes(oneSiz - 1)
                End If
                bytes.CopyTo(dat, ttlSiz)
                ttlSiz = ttlSiz + oneSiz
            End If
        Loop While (oneSiz > 0)

        Return dat
    Catch ex As Exception
        Throw ex
    Finally
        If st Is Nothing = False Then
            st.Close()
            st = Nothing
        End If
        If rs Is Nothing = False Then
            rs.Close()
            rs = Nothing
        End If
    End Try
End Function