トップ  >  サンプルソース  >  圧縮WEBページ解凍(C#/VB.NET)

圧縮WEBページ解凍(C#/VB.NET)

2012年01月07日

HTTP圧縮されているWEBページを解凍して取得(ダウンロード)するサンプル(ソース/コード)です。

HTTP圧縮されているWEBページを解凍せずにそのままダウンロードすると、HTML形式のテキストとして処理する事が出来ません。

FC2のWEBページをダウンロードすると一部のWEBページが圧縮されたまま送られてくるので注意が必要です。

' ----------------------------------------------------------
' 圧縮WEBページ解凍(ダウンロード)のサンプル(VB.NET/VS2005)
Private strUrl As String = "http://xxx.xxx.com/"
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    ' WEBページ読み込み
    Dim webp As Byte() = GetWebPage(strUrl)
    Dim text As String = _
        System.Text.Encoding.GetEncoding( _
        "EUC-JP").GetString(webp)
End Sub

' WEBページ取得
Private Function GetWebPage(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)
        ' WEBページが圧縮されている時-----------------------
        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")
        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
' ----------------------------------------------------------

// ---------------------------------------------------------
// 圧縮WEBページ解凍(ダウンロード)のサンプル(C#.NET/VS2005)
private String strUrl = "http://xxx.xxx.com/";
private Byte[] oldWeb = new Byte[0] { };
private void button1_Click(object sender, EventArgs e)
{
    // WEBページ読み込み
    Byte[] webp = GetWebPage(strUrl);
    String text =
        System.Text.Encoding.GetEncoding(
        "EUC-JP").GetString(webp);
}

// WEBページ取得
private Byte[] GetWebPage(String url)
{
    System.IO.Stream st = null;
    System.Net.WebResponse rs = null;
    try
    {
        Uri url_uri = new Uri(url);
        Byte[] dat = new Byte[0] { };

        System.Net.WebRequest rq =
            ((System.Net.HttpWebRequest)
            System.Net.WebRequest.Create(url));
        // WEBページが圧縮されている時----------------------
        ((System.Net.HttpWebRequest)rq).
            AutomaticDecompression =
            System.Net.DecompressionMethods.GZip;
        //--------------------------------------------------
        ((System.Net.HttpWebRequest)rq).UserAgent =
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)";
        ((System.Net.HttpWebRequest)rq).Headers.Add(
            "Accept-Language", "ja");
        rs = rq.GetResponse();

        st = rs.GetResponseStream();
        Byte[] bytes = new Byte[0] { };
        int ttlSiz = 0;
        int oneSiz;
        do
        {
            Array.Resize<Byte>(ref bytes, 1024 * 100);
            oneSiz = st.Read(bytes, 0, bytes.Length);
            if (oneSiz > 0)
            {
                Array.Resize<Byte>(ref dat, ttlSiz + oneSiz);
                if (oneSiz != bytes.Length)
                {
                    Array.Resize<Byte>(ref bytes, oneSiz);
                }
                bytes.CopyTo(dat, ttlSiz);
                ttlSiz = ttlSiz + oneSiz;
            }
        } while (oneSiz > 0);

        return dat;
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        if (st != null)
        {
            st.Close();
            st = null;
        }
        if (rs != null)
        {
            rs.Close();
            rs = null;
        }
    }
}
// ---------------------------------------------------------
スポンサーサイト

成長して贅沢になったワン | トップページへ戻る | キーボードの擬似操作(C#/VB.NET)

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る