繁体   English   中英

Windows 8 C# - 将网页源检索为字符串

[英]Windows 8 C# - retrieve a webpage source as string

有一个教程实际上适用于带有XAML和C#的Windows 8平台: http//www.tech-recipes.com/rx/1954/get_web_page_contents_in_code_with_csharp/

这是如何做:

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();

但是在Windows 8中,最后两行是关闭连接的代码(我假设),检测到错误。 尽管如此,它在没有关闭连接的情况下工作正常,但有什么可能性? 为什么我们必须关闭连接? 如果我不这样做可能会出错? “关闭连接”甚至意味着什么?

如果您正在为Windows 8开发,则应考虑使用异步方法来提供更好的用户体验,这是推荐的新标准。 您的代码将如下所示:

public async Task<string> MakeWebRequest(string url)
{
    HttpClient http = new System.Net.Http.HttpClient();
    HttpResponseMessage response = await http.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}

也许他们已经在最新的API中弃用了close() 这应该工作:

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";

using(WebResponse myResponse = myRequest.GetResponse() )
{
    using(StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8)) 
    {
        string result = sr.ReadToEnd();
    }
}

using命令将自动处理您的对象。

要突出显示webnoob的评论:

只是指出(对于OP参考)你只能使用实现IDisposable的类(在这种情况下是好的)

using System.Net;
using System.Net.Http;

var httpClient = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, targetURL);
//message.Headers.Add(....);
//message.Headers.Add(....);

var response = await httpClient.SendAsync(message);
if (response.StatusCode == HttpStatusCode.OK)
{
    //HTTP 200 OK
    var requestResultString = await response.Content.ReadAsStringAsync();
}

我建议使用HTTP客户端。 Microsoft HTTP客户端示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM