调用 HttpWebRequest.GetResponse() 时出现协议错误
Posted
技术标签:
【中文标题】调用 HttpWebRequest.GetResponse() 时出现协议错误【英文标题】:ProtocolError while calling HttpWebRequest.GetResponse() 【发布时间】:2011-09-19 16:18:27 【问题描述】:我有一个包含一些文件链接的页面。
我基本上需要访问页面的源来解析它并获取文件的所有超链接。
我的代码是这样的(我在网上很多地方都找到了一些代码..):
"private static byte[] ReadImageFromUrl(string url)
var myReq = (HttpWebRequest)WebRequest.Create(url);
myReq.Timeout = 10000;
WebResponse myResp = myReq.GetResponse();
Stream stream = myResp.GetResponseStream();
List<byte> bytesList = new List<byte>();
using (var br = new BinaryReader(stream))
try
while (true)
var b = br.ReadByte();
bytesList.Add(b);
catch (Exception)
br.Close();
myResp.Close();
return bytesList.ToArray();
"
现在的问题是我得到“System.Net.WebException:远程服务器返回错误:(500)内部服务器错误。”调用“myReq.GetResponse()”时 - 检查错误,我发现状态为“ProtocolError”。
WebException 对象的响应属性包含一些服务器错误..(尽管从浏览器打开它时它会正确打开)...当我使用我的一个文件的 url 调用此函数时,我得到相同的 ProtocolError状态,但是404错误...
请提供任何提示我该如何解决它...或完成此任务的任何其他可能性。
谢谢!
【问题讨论】:
【参考方案1】:我使用Fiddler
后的新代码是:
private static byte[] ReadFileFromUrl(string url)
var myReq = (HttpWebRequest)WebRequest.Create(url);
myReq.Accept = const_AcceptHeader;
myReq.Headers.Set(const_AcceptLanguageHeaderName, const_AcceptLanguageHeader);
myReq.UserAgent = const_AcceptUserAgentHeader;
myReq.CookieContainer = new CookieContainer();
myReq.KeepAlive = true;
myReq.Timeout = Int32.Parse(ConfigSettings.RequestPageTimeout) * 1000;
WebResponse myResp = null;
List<byte> bytesList = null;
myResp = myReq.GetResponse();
Stream stream = myResp.GetResponseStream();
bytesList = new List<byte>();
using (var br = new BinaryReader(stream))
try
while (true)
var b = br.ReadByte();
bytesList.Add(b);
catch (Exception ex)
throw;
br.Close();
return bytesList.ToArray();
所有以 const_ 开头的变量均取自Fiddler
。
【讨论】:
【参考方案2】:好吧,我使用 Fiddler 解决了这个问题……我将头文件传递给我的请求对象,就像我在 Fiddler 中看到的那样……它有效,没有错误
【讨论】:
您是如何将标头传递给请求对象的?你能显示那个代码吗?请注意,您应该在这里接受自己的答案,否则它将永远保持打开状态(您也会因此获得声誉)。 谢谢。但是您应该编辑此答案而不是创建一个新答案。以上是关于调用 HttpWebRequest.GetResponse() 时出现协议错误的主要内容,如果未能解决你的问题,请参考以下文章