我想从网站下载一个字符串,我制作了这个php文件来展示一个例子。
(这在我的整个网站上都不起作用(
链接http://swageh.co/information.php不会使用webClient从任何PC下载。
我更喜欢使用webClient。无论我尝试什么,它都不会下载String。它在浏览器上运行良好。
它返回错误500在System.dll 中发生类型为"System.Net.WebException"的未处理异常
附加信息:基础连接已关闭:发送时发生意外错误。是错误
您是否更改了服务器端的某些内容
截至目前,以下所有选项对我来说都很好(所有选项都返回"false",StatusCode为200(:
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;
这是因为您的网站正在响应301 Moved Permanently请参阅获取301 URl重定向到的位置这展示了如何自动遵循重定向:在C#中使用WebClient,有没有一种方法可以在重定向后获得网站的URL?看看Christophe Debove的答案,而不是公认的答案。
有趣的是,这不起作用——试着让标题与下面的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();