C# 使用C从网站读取数据#

C# 使用C从网站读取数据#,c#,webpage,C#,Webpage,我有一个网页,除了一些字符串外,没有其他内容。没有图像,没有背景色或其他任何东西,只有一些没有那么长的纯文本 我只是想知道,在网页中传递字符串的最佳方式(我指的是最快和最有效的方式)是什么,以便我可以将其用于其他用途(例如,在文本框中显示)?我知道WebClient,但我不确定它是否能达到我想要的效果,而且我甚至不想尝试它,即使它能工作,因为上次我做一个简单的操作大约需要30秒 如果您有任何想法,我们将不胜感激。WebClient类应该能够处理您描述的功能,例如: System.Net.WebC

我有一个网页,除了一些字符串外,没有其他内容。没有图像,没有背景色或其他任何东西,只有一些没有那么长的纯文本

我只是想知道,在网页中传递字符串的最佳方式(我指的是最快和最有效的方式)是什么,以便我可以将其用于其他用途(例如,在文本框中显示)?我知道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);
或(根据弗雷德里克在评论中的建议)

当你说花了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秒延迟的原因。

如果您正在下载文本,我建议您使用WebClient并使用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();
        }
如果这需要很长时间,则可能是网络问题或web服务器上的问题。试着在浏览器中打开资源,看看需要多长时间。 如果网页非常大,您可能希望将其分块进行流式处理,而不是像该示例中那样一直阅读到最后。 查看以了解如何从流中读取。

关于建议 因此,我建议您使用WebClient并调查30秒延迟的原因

根据问题的答案

尝试设置Proxy=null

WebClient wc=新的WebClient(); wc.Proxy=null

归功于Alex Burtsev

WebClient=newWebClient();
使用(流数据=client.OpenRead(Text))
{
使用(StreamReader=新StreamReader(数据))
{
字符串内容=reader.ReadToEnd();
字符串模式=@“(https?| ftp | gopher | telnet | file | notes | ms help):((/)|(\\\\\)+[\w\d:\\@%/;$()~+-=\\\\.&]*);
MatchCollection matches=Regex.matches(内容、模式);
列表URL=新列表();
foreach(匹配中的匹配)
{
Add(match.Value);
}
}

WebClient类是这里的自然选择。WebClient运行时间不应超过30秒(假设没有其他网络问题)。您的选择仅限于WebClient或WebRequest/WebResponse(这是WebClient在场景下使用的,所以只需选择WebClient)。至于速度慢的原因,这与.NET HTTP堆栈的实现无关。可能是网络问题,您试图获取的网站的实现不佳,导致返回响应的速度慢,…例如,在正确编写的网站上运行web客户端,例如需要几毫秒要获取远低于您在站点上观察到的30秒的响应,顺便问一下,您的意思是解析吗?如果是,您将使用什么技术进行解析?例如,什么样的文本框形式,另一个网站?或者,使用该方法并摆脱字节数组处理:
string result=wc.DownloadString(…
我编写了一个按钮,可以保存一个页面(尽管这个页面的流量很大)使用WebClient类,然后将文件中的某些内容替换为页面的某些内容。我使用秒表计时所用时间,时间从10秒到40秒不等。internet连接可能不好,但我怀疑这是主要原因。不幸的是,我不再有该按钮的代码,否则我会发布它.:\@Fredrik:+1对于DownloadString建议,顺便问一下,当使用浏览器查看网页时,网页下载是否更快?此外,网页是否安全?在这种情况下,如果计算机无法联系根证书,验证证书可能需要约40秒。根据我的经验,DNS配置错误通常会导致网络响应缓慢。@Iceyoshi:你下载了多少数据?几KB或几MB?你确定延迟是在WebClient调用上,而不是在随后的解析/替换上?
        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();
        }
 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);
                    }

              }