我想从网站上下载字符串,我制作了这个php文件来显示示例。
(这不适用于我的整个网站)
将不会使用webClient从任何PC下载链接http://swageh.co/information.php。
我更喜欢使用webClient。 不管我尝试什么,它都不会下载字符串。 它可以在浏览器上正常工作。
它返回错误500 System.dll中发生了'System.Net.WebException'类型的未处理异常
其他信息:基础连接已关闭:发送中发生意外错误。是错误
答案 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;