使用WebRequest下载xml数据!

原创 2007年09月22日 19:17:00

今天帮一个同事做了个小程序,他的要求是: 要取一个论坛的帖子的标题,然后在他的网站里面把这些标题显示出来。由于已经有数据源,所以也不难,但是要要我直接通过Url去取这些xml格式的数据,我首先想到了使用XmlTextReader这个xml读取类来读取xml数据,因为这个操作类正好支持从url取数据的功能,但是,等我实际操作的时候,报了一个错,错误消息为:读取gbk格式的xml出错,我马上查了一下,发现XmlTextReader不能读取gbk格式的xml数据,这就郁闷了,因为想这样子的话就需要我对这些gbk编码的xml数据进行解码,但是能够支持解码的xml操作类好像又不支持从url取数据的功能(目前我没发现,有谁知道的就告诉我一声),最后我就想到使用WebRequest去下载这些xml数据,然后在流中对这些gbk编码的xml数据进行转码,最后我终于搞出来了,代码如下:(注意:使用了代理上网的人一定记得在调用下载方法的时候要传入自己的代理设置,否则会下载失败)

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Net;
using System.IO;
using System.Text;

namespace myTest
...{
    
/**//// <summary>
    
/// WebForm1 的摘要说明。
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    
...{
        
//protected static Hashtable hs = new Hashtable();
        private void Page_Load(object sender, System.EventArgs e)
        
...{
            
this.Init_Data();
        }


        
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
        
override protected void OnInit(EventArgs e)
        
...{
            
//
            
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/**//// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void InitializeComponent()
        
...{    
            
this.Load += new System.EventHandler(this.Page_Load);
        }

        
#endregion


        
private void Init_Data()
        
...{
            
string result = string.Empty;
            System.Xml.XmlDocument doc 
= new XmlDocument();
            
string url = "http://bbs.foshan.gov.cn/rss.php?fid=53&auth=0";
            
string proxy = "test.gmcc.net:8006"//这是我的代理地址,你如果没有使用代理就设置为空
            
//到缓存中取xml数据,如果缓存中没有数据则执行下载方法
            if (Cache["xmlData"!= null)
            
...{
                doc.LoadXml((
string)Cache["xmlData"]);
                Response.Write(
"<font color='red'>从缓存中取</font>");
            }

            
else
            
...{
                
//开始下载数据
                string strXml = this.DownLoad(url,proxy);
                
//缓存xml数据,不用每次都去下载(每隔30秒就更新一次缓存中的数据)
                Cache.Insert("xmlData",strXml,null,DateTime.Now.AddSeconds(30),TimeSpan.Zero,System.Web.Caching.CacheItemPriority.Normal,null);
                doc.LoadXml(strXml);
                Response.Write(
"<font color='blue'>下载的数据</font>");
            }

            
//StreamReader reader = new StreamReader(@"c:.xml",System.Text.Encoding.Default);

            System.Xml.XmlNodeList nodes 
= doc.SelectNodes("//title[position()>0]"); //只需取标题就可以了
            foreach (System.Xml.XmlNode node in nodes)
            
...{
                result 
+= node.InnerText;
            }

            Response.Write(result);
            Response.End();
        }


        
/**//// <summary>
        
/// 下载xml数据方法
        
/// </summary>
        
/// <param name="Url">要下载的xml地址</param>
        
/// <param name="MyProxy">如果设置了代理,就设置;如果没有则传空字符串</param>
        
/// <returns>返回下载到的xml数据</returns>

        public string DownLoad(string Url,string MyProxy)
        
...{
            
string strResult = "";
            Uri u 
= new Uri(Url);

            HttpWebRequest myReq 
= (HttpWebRequest)WebRequest.Create(u);
            myReq.Timeout 
= 3600 * 1000 * 2;
            
if (MyProxy != "" & MyProxy != ":")
            
...{
                WebProxy proxyObject 
= new WebProxy(MyProxy, true);
                myReq.Proxy 
= proxyObject;
            }


            
try
            
...{
                HttpWebResponse HttpWResp 
= (HttpWebResponse)myReq.GetResponse();
                myReq.AllowAutoRedirect 
= false;

                Stream myStream 
= HttpWResp.GetResponseStream();
                
//在流中进行转码
                StreamReader sr = new StreamReader(myStream, Encoding.Default);

                Char[] read 
= new Char[256];

                
int count = sr.Read(read, 0256);
                
while (count > 0)
                
...{
                    
//把 流中的数据读取完毕
                    strResult += new String(read, 0, count);
                    count 
= sr.Read(read, 0256);
                }

                sr.Close();
                myStream.Close();
                HttpWResp.Close();
                myReq.Abort();
            }

            
catch (Exception exp)
            
...{
                
throw new Exception("错误:" + exp.Message);
            }

            
return strResult;
        }

    }

}

HttpWebRequest 下载图片至本地

HttpWebRequest发送web请求,获取流文件,保存至本地 using System; using System.IO; using System.Net; using System.Text...
  • KingCruel
  • KingCruel
  • 2016年12月09日 14:02
  • 2150

C#中网页文件下载——HttpWebRequest与HttpWebResponse的使用方法

这个类是专门为HTTP的GET和POST请求写的,解决了编码,证书,自动带Cookie等问题。 C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cook...
  • u012355740
  • u012355740
  • 2014年10月29日 12:12
  • 1733

XML数据接口开发

XML文件   xx             xxxxxxxxxxxxx       XXXXXXXXXXXXXXXXX       X       XXXXXXXXXX ...
  • ITX2000
  • ITX2000
  • 2015年01月22日 09:18
  • 1089

WebRequest 对象的使用

// 待请求的地址 string url = "http://www.cnblogs.com";               // 创建 WebRequest 对象,We...
  • ygzhong000
  • ygzhong000
  • 2014年05月19日 22:04
  • 675

模拟新闻客户端从服务器获取xml数据并显示到ListView

模拟新闻客户端从服务器获取数据并显示到ListView
  • m0_38053081
  • m0_38053081
  • 2017年04月09日 20:42
  • 430

使用faster rcnn训练imageNet上的部分数据集

最近在做毕业设计,需要用到faster rcnn,训练数据使用的是我自己下载的imageNet里的部分数据,主要用到了其中的bike,motorbike,car,bus,train等交通工具。由于im...
  • u014696921
  • u014696921
  • 2016年10月27日 21:35
  • 3912

XML使用总结(一)

XML是一种可拓展的标记语言,被设计用来描述、存储及传递数据的语言体,而它的标签没有被预定义,需要用户自行定义,是W3C推荐的数据存储和传递的标准标记语言。 • XML与HTML? • XML的用途...
  • why_2012_gogo
  • why_2012_gogo
  • 2016年03月25日 23:51
  • 2707

利用XML传输数据

一、客户端以XML格式向服务器端发送数据,并解析XML输出到控制台 代码如下:Emp类 public class Emp { private int id; private String nam...
  • wangqing84411433
  • wangqing84411433
  • 2017年02月05日 14:29
  • 2562

VOC2007数据集制作——createXML

#-*- coding:utf-8 -*- ''' 该代码是将数据转为VOC2007,该代码实现了XML生成和图片位置更改以及文件重命名 ''' import xml.dom import x...
  • yjl9122
  • yjl9122
  • 2017年02月24日 15:17
  • 1108

Mini-XML库在VC6.0及其他VS环境下的使用

一、官方下载地址     Mini-XML官方网站     下载源码自行根据使用环境进行编译,同时下载PDF版doc已被查看。 二、Windows平台下的使用     我使用测试环境是VC++6.0、...
  • xiaobaohe
  • xiaobaohe
  • 2015年06月06日 15:14
  • 1448
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用WebRequest下载xml数据!
举报原因:
原因补充:

(最多只允许输入30个字)