访问WebClient时出现“ System.Net.WebException”。在浏览器上工作正常

时间:2018-07-19 15:16:13

标签: c# webclient

我想从网站上下载字符串,我制作了这个php文件来显示示例。

(这不适用于我的整个网站)

将不会使用webClient从任何PC下载链接http://swageh.co/information.php

我更喜欢使用webClient。 不管我尝试什么,它都不会下载字符串。 它可以在浏览器上正常工作。

它返回错误500 System.dll中发生了'System.Net.WebException'类型的未处理异常

其他信息:基础连接已关闭:发送中发生意外错误。是错误

2 个答案:

答案 0 :(得分:1)

这是因为您的网站响应“永久移动301” 参见Get where a 301 URl redirects to 这显示了如何自动遵循重定向:Using WebClient in C# is there a way to get the URL of a site after being redirected? 看克里斯托弗·德博夫的答案,而不是公认的答案。

有趣的是,这行不通-尝试使标头与下面的Chrome相同,也许使用Telerik Fiddler查看正在发生的事情。

var strUrl = "http://theurl_inhere";
            var headers = new WebHeaderCollection();
            headers.Add("Accept-Language", "en-US,en;q=0.9");
            headers.Add("Cache-Control", "no-cache");
            headers.Add("Pragma", "no-cache");
            headers.Add("Upgrade-Insecure-Requests", "1");

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
            request.Method = "GET";
            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            request.Accept = "text/html,application/xhtml+xml,application/xml; q = 0.9,image / webp,image / apng,*/*;q=0.8";
            request.Headers.Add( headers );
            request.AllowAutoRedirect = true;
            request.KeepAlive = true;
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36";

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream dataStream = response.GetResponseStream();

            var strLastRedirect = response.ResponseUri.ToString();

            StreamReader reader = new StreamReader(dataStream);
            string strResponse = reader.ReadToEnd();

            response.Close();

答案 1 :(得分:1)

您在服务器端进行了更改吗?
到目前为止,以下所有选项对我来说都可以正常工作(所有状态代码均为200时都返回“ false”):

 var client = new WebClient();
 var stringResult = client.DownloadString("http://swageh.co/information.php");

也是HttpWebRequest:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://swageh.co/information.php");
 request.GetResponse().GetResponseStream();

较新的HttpClient

var client = new HttpClient();

var req = new HttpRequestMessage(HttpMethod.Get, "http://swageh.co/information.php");

var res = client.SendAsync(req);

var stringResult = res.Result.Content.ReadAsStringAsync().Result;