我有一个网页除了一些字符串以外什么也没有。没有图像,没有背景颜色或任何东西,只是一些纯文本,其实不是很长。使用C#从网站读取数据
我只是想知道,什么是最好的(由此,我的意思是最快和最有效的)的方式来传递网页中的字符串,以便我可以使用它的东西(例如在文本框中显示)?我知道WebClient,但我不确定它是否能够做到我想要的功能,加上我甚至不想尝试,即使它工作,因为上次我做了大约30秒一个简单的操作。
任何想法,将不胜感激。
我有一个网页除了一些字符串以外什么也没有。没有图像,没有背景颜色或任何东西,只是一些纯文本,其实不是很长。使用C#从网站读取数据
我只是想知道,什么是最好的(由此,我的意思是最快和最有效的)的方式来传递网页中的字符串,以便我可以使用它的东西(例如在文本框中显示)?我知道WebClient,但我不确定它是否能够做到我想要的功能,加上我甚至不想尝试,即使它工作,因为上次我做了大约30秒一个简单的操作。
任何想法,将不胜感激。
WebClient类应该能够处理你所描述的功能多,例如:
System.Net.WebClient wc = new System.Net.WebClient();
byte[] raw = wc.DownloadData("http://www.yoursite.com/resource/file.htm");
string webData = System.Text.Encoding.UTF8.GetString(raw);
或(进一步的建议从弗雷德里克在评论)
System.Net.WebClient wc = new System.Net.WebClient();
string webData = wc.DownloadString("http://www.yoursite.com/resource/file.htm");
当你说花了30秒钟,你可以扩大一点吗?为什么会发生这种事情有很多原因。较慢的服务器,网络连接,狡猾的实施等等等等
你可以去一个水平低和实施这样的事情:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com/resource/file.htm");
using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8))
{
streamWriter.Write(requestData);
}
string responseData = string.Empty;
HttpWebResponse httpResponse = (HttpWebResponse)webRequest.GetResponse();
using (StreamReader responseReader = new StreamReader(httpResponse.GetResponseStream()))
{
responseData = responseReader.ReadToEnd();
}
然而,在一天结束的WebClient类包装了此功能,您。所以我建议你使用WebClient并调查30秒延迟的原因。
如果您正在下载文本,然后我会建议使用Web客户端,并得到一个StreamReader的文字:
WebClient web = new WebClient();
System.IO.Stream stream = web.OpenRead("http://www.yoursite.com/resource.txt");
using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
{
String text = reader.ReadToEnd();
}
如果花费很长的时间,那么它可能是网络问题或有问题在网络服务器上。尝试在浏览器中打开资源并查看需要多长时间。 如果网页非常大,您可能需要考虑将它分成几部分,而不是像这个例子那样一直读到最后。 查看http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx以了解如何从流中读取数据。
关于建议 所以我建议您使用WebClient并调查30秒延迟的原因。
从答案的问题 System.Net.WebClient unreasonably slow
尝试设置代理= NULL;
WebClient wc = new WebClient(); wc.Proxy = null;
感谢亚历克斯Burtsev
WebClient client = new WebClient();
using (Stream data = client.OpenRead(Text))
{
using (StreamReader reader = new StreamReader(data))
{
string content = reader.ReadToEnd();
string pattern = @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";
MatchCollection matches = Regex.Matches(content,pattern);
List<string> urls = new List<string>();
foreach (Match match in matches)
{
urls.Add(match.Value);
}
}
WebClient类是这里的自然选择。 Web客户端不应该花30秒运行(假设没有其他网络问题)。 – Jimmy 2011-01-21 11:32:50
您的选择仅限于WebClient或WebRequest/WebResponse(这是WebClient在场景下使用的,因此只适用于WebClient)。至于为什么它很慢,这与.NET HTTP栈的实现毫无关系。这可能是网络问题,您尝试访问的网站实施不当,导致返回响应速度变慢,...例如,在正确编写的网站上运行Web客户端,例如http://www.google .com需要几毫秒的时间才能获取远远低于您观察站点30秒的响应。 – 2011-01-21 11:34:01