来自 Web 请求对象的 GetResponse 失败,并出现身份验证问题
本文关键字:身份验证 问题 失败 请求 Web 对象 GetResponse 来自 | 更新日期: 2023-09-27 18:25:57
Stream FeedReader(string url_)
{
var url = url_;
var USER = "username";
var PASS = "password";
//var encoded = TextToBase64(USER + ":" + PASS);
WebRequest myWebRequest = WebRequest.Create(url);
// myWebRequest.Method = "POST";
//myWebRequest.ContentType = "application/x-www-form-urlencoded";
myWebRequest.PreAuthenticate = true;
myWebRequest.Credentials = new NetworkCredential(USER, PASS);
myWebRequest.Timeout = 10000;
//WebResponse response = myWebRequest.GetResponse();
var stream = myWebRequest.GetResponse().GetResponseStream() ;
return stream;
}
我不知道为什么调用此函数后总是出现错误(连接超时(,希望有人能提供帮助。请不要犹豫,帮助我,非常感谢你......
public static List<Item> ParseAtom2(Stream stream)
{
XDocument doc = XDocument.Load(stream);//("atom.xml");
XNamespace ns = "http://www.w3.org/2005/Atom";
var entries = doc.Root
.Descendants(ns + "entry")
.Select(item => new Item
{
FeedType = FeedType.Atom,
Content = item.Element(ns + "content").Value,
Link = "",//(string)item.Element(ns + "link").Attribute("href").Value,
PublishDate = DateTime.Parse(item.Element(ns + "published").Value),
Title = item.Element(ns + "title").Value
});
stream.Close();
return entries.ToList();
}
这是我使用从第一个函数返回的流作为参数的第二个函数。而且我总是收到超时连接错误。
我的猜测是你没有关闭流,希望也能关闭响应。(您通常会显式释放响应。我至少会考虑在这种方法中创建流的副本。在 .NET 4 中很容易:
using (var response = myWebRequest.GetResponse())
{
MemoryStream copy = new MemoryStream();
using (var responseStream = response.GetResponseStream())
{
responseStream.CopyTo(copy);
}
copy.Position = 0;
return copy;
}
如果未正确释放资源,连接池将认为你仍在使用连接,并且每个主机的连接数有限制。
(假设我是对的,并且您没有在其他地方关闭流,您也应该这样做 - 一般来说,请确保您始终关闭资源。