我已经在寻找一些关于此的明确文件,但没有找到任何运气.
在执行类似POST HttpWebRequest.GetResponse()的操作WebException后,哪些HTTP响应状态代码会生成?
具体来说,它会产生WebException除状态以外的任何东西200 OK吗?或者只会产生WebException400,404和500(为了争论)?
我想知道,因为我正在与之通信的服务器定义了除了HTTP 200 OK作为错误条件返回之外的任何内容.我可以依靠WebException为200以外的任何东西生成?
我目前编写代码来检查每次返回状态代码并确保它200 OK.如果不是,它将采取适当的行动 - 但是在WebException我希望清理的代码和catch块之间有很多重复.
任何与文档相关的链接都将非常受欢迎.
出于某种原因,我理解对特定网站(https://learningnetwork.cisco.com/people/mrollins?view=profile)的请求会产生一个reqsponse对象,其响应流包含网站的主干版本.
流在65536字节之后结束,等于2 ^ 16字节.我认为这是一个可疑的数字.这些请求抱怨内部服务器错误,我对此表示赞同,因为我已经验证了webbrowsers能够理解这个响应,并且完整的html包含在服务器的响应中.(使用提琴手)
我发现以前记录的问题在这里,这是不能令人满意的,原因很简单,它在这张票据上结束:
"我想我不得不希望错误不超过65536个字符......"
它确实如此.
解决方法很受欢迎,或者如果有人知道一个好的修复也很好.
using System;
using System.IO;
using System.Net;
using System.Web.UI;
namespace Example
{
public partial class _Default : Page
{
protected void Page_Load(object senderHidden, EventArgs eHidden)
{
//ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
var cookieContainer = new CookieContainer();
//Encoding enc = Encoding.UTF8;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://learningnetwork.cisco.com/people/mrollins?view=profile");
req.AllowAutoRedirect = false;
req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
req.CookieContainer = cookieContainer;
req.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; …Run Code Online (Sandbox Code Playgroud) 我有一个用VB.NET编写的应用程序(不是 asp.net,它是一个Windows控制台应用程序).我正在尝试调用url(一个html页面)并将响应返回到一个字符串中.响应是直接的JSON,没有任何html标签.它打开{和关闭}.
我很好地创建了HttpWebRequest对象.然后打电话req.GetResponse().一旦我这样做,我得到错误,The underlying connection was closed: The connection was closed unexpectedly.我一直在谷歌搜索和检查stackoverflow,并尝试了我发现适用的一切(很多与WCF服务配置有关,不适用).
这是我的代码:
Public Function GetJSON(ByRef d As db.Device) As Boolean
Try
d.Url = "http://" & d.IpAddress & ini.doc.<svc>.<url>.Value
Dim req As HttpWebRequest = HttpWebRequest.Create(d.Url)
// req.Accept = "*/*"
// req.Timeout = 30000
// req.ReadWriteTimeout = 30000
// req.KeepAlive = False
// req.UseDefaultCredentials = True
// req.CachePolicy = HttpWebRequest.DefaultCachePolicy
// req.Proxy = HttpWebRequest.DefaultWebProxy
// req.ProtocolVersion = New System.Version(1, 0)
Dim rsp …Run Code Online (Sandbox Code Playgroud) 我们的控制台应用程序每分钟都会向Facebook发送数百个WebRequests(使用多个应用程序和数百个访问令牌).现在,他们开始失败并在标题中显示异常消息("请求已中止:请求已取消").我们在互联网上搜索了几个小时,并尝试了所有可能的解决方案,但没有任何帮助.
这些没有帮助:
webRequest.Timeout = 20000; //A request that didn't get respond within 20 seconds is unacceptable, and we would rather just retry.
webRequest.KeepAlive = false;
webRequest.ProtocolVersion = HttpVersion.Version10;
webRequest.ServicePoint.Expect100Continue = false;
Run Code Online (Sandbox Code Playgroud)
任何人有任何其他想法?
编辑:
异常的ToString:System.Net.WebException:请求已中止:请求已取消.---> System.Net.WebException:请求在System.Net.HttpWebRequest.FindServicePoint(布尔forceFind)的System.Net.ServicePointManager.FindServicePoint(Uri地址,IWebProxy代理,ProxyChain&chain,HttpAbortDelegate&abortDelegate,Int32&abortState)中被取消.在System.Net.HttpWeb上的System.Net.HttpWebRequest.DoSubmitRequestProcessing(异常和异常)处(异常E)---内部异常堆栈跟踪结束---在WebException消息的System.Net.HttpWebRequest.GetResponse()处:请求已中止:请求已取消.
edit2:我们没有达到极限.我们知道什么时候发生,问题不是那样.我们已经这样做了两年,这件事在整个过程中只发生过两次.根据AccessToken,我们每分钟只做2-3次请求,Facebook上的限制是600个请求/ accesstoken/ip.
edit3:我想为有这个或类似问题的人添加一个额外的提示:确保你处理你的RequestStream,你的Response和你的ResponseStream对象.
c# http-error system.net.webexception system.net.httpwebrequest
所以我的应用程序正在与服务器交换请求/响应(没有问题),直到互联网连接死了几秒钟,然后回来.然后是这样的代码:
response = (HttpWebResponse)request.GetResponse();
将抛出一个异常,与状态一样ReceiveFailure,ConnectFailure,KeepAliveFailure等.
现在,非常重要的是,如果互联网连接回来,我能够继续与服务器通信,否则我将不得不从头开始,这将需要很长时间.
当互联网回来时,您将如何恢复此通信?
目前,我一直在检查是否有可能与服务器通信,直到可能(至少理论上).我的代码尝试看起来像这样:
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
// We have a problem receiving stuff from the server.
// We'll keep on trying for a while
if (ex.Status == WebExceptionStatus.ReceiveFailure ||
ex.Status == WebExceptionStatus.ConnectFailure ||
ex.Status == WebExceptionStatus.KeepAliveFailure)
{
bool stillNoInternet = true;
// keep trying to talk to the server
while (stillNoInternet)
{
try
{
response = (HttpWebResponse)request.GetResponse();
stillNoInternet = false;
}
catch …Run Code Online (Sandbox Code Playgroud) .net c# httpwebrequest httpwebresponse system.net.webexception
如何检测WebRequest由于Web代理错误而不是目标Web服务器错误而失败?
try
{
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com");
request.Proxy = new WebProxy("localhost");
var response = request.GetResponse();
return response.GetResponseStream();
}
catch(WebException webex)
{
//Detect proxy failure
}
Run Code Online (Sandbox Code Playgroud) c# proxy httpwebrequest httpwebresponse system.net.webexception
有人可以帮助清除HttpWebResponse和WebException中"StatusCode"属性的用法吗?
例如,似乎如果:
a)没有异常,那么HttpWebResponse将有一个StatusCode可以有一些值,表明两者: - 成功(例如OK,Accepted等) - 失败(例如UseProxy,RequestTimeout等)
b)有一个WebExeption throw,它本身有一个响应对象,它又有一个StatusCode(我假设它是基于相同的HttpStatusCode枚举).
问题1 - 在StatusCode将触发WebException(并且您在异常中获取详细信息)方面是否存在任何一致性,相比之下,没有异常会返回但是您会在StatusCode中找到结果响应对象?
问题2 - 或者更具体地说,尝试处理httpWebRequest.GetResponse调用的pseduo代码(或C#代码本身)是什么,以便您要区分用户的响应类别:
代理设置/代理问题=>所以可以告诉用户修复代理设置
连接问题/ web-server down =>所以用户意识到这一点
服务器端错误(例如服务器在那里,但处理请求有问题 - 例如内容不在那里)=>所以用户可以提出网站管理员
成功案例(我认为这不仅仅是OK)=> na(成功案例)
谢谢
c# http httpwebrequest http-status-codes system.net.webexception
嗨,我正在为一个网站制作一个爬虫。经过大约 3 小时的爬网,我的应用程序因 WebException 停止。下面是我在 C# 中的代码。client 是预定义的WebClient对象,每次 gameDoc 已经被处理时都会被处理。gameDoc 是一个HtmlDocument对象(来自HtmlAgilityPack)
while (retrygamedoc)
{
try
{
gameDoc.LoadHtml(client.DownloadString(url)); // this line caused the exception
retrygamedoc = false;
}
catch
{
client.Dispose();
client = new WebClient();
retrygamedoc = true;
Thread.Sleep(500);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图从这个答案中使用下面的代码(以保持网络客户端新鲜)
while (retrygamedoc)
{
try
{
using (WebClient client2 = new WebClient())
{
gameDoc.LoadHtml(client2.DownloadString(url)); // this line cause the exception
retrygamedoc = false;
}
}
catch
{
retrygamedoc = true;
Thread.Sleep(500);
} …Run Code Online (Sandbox Code Playgroud) 我在现有的.NET 2.0 Web服务中调用.NET 2.0 Web服务.我想知道如果发生超时,Web方法会抛出什么异常.我已将Web服务超时设置为低于默认值90秒的值,并且如果超时发生,我想添加业务逻辑.
是[System.Net.WebException][1]我应该看的例外吗?
System.Net.WebException:服务器返回一个地址以响应PASV命令,该命令与进行FTP连接的地址不同.
在System.Net.FtpWebRequest.CheckError()
在System.Net.FtpWebRequest.SyncRequestCallback(对象OBJ)
在System.Net.CommandStream.Abort(例外五)
在System.Net.FtpWebRequest.FinishRequestStage(RequestStage阶段)
在System.Net .FtpWebRequest.GetRequestStream()
在BackupDB.Program.FTPUploadFile(字符串SERVERPATH,字符串serverFile,FileInfo的LOCALFILE,的NetworkCredential中房)中d:\ PROJEKTI \的backupdb \的backupdb \的Program.cs:线119
码:
FTPMakeDir(new Uri(serverPath + "/"), Cred);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverPath+serverFile);
request.UsePassive = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = Cred;
byte[] buffer = new byte[10240]; // Read/write 10kb
using (FileStream sourceStream = new FileStream(
LocalFile.ToString(), FileMode.Open))
{
using (Stream requestStream = request.GetRequestStream())
{
int bytesRead;
do
{
bytesRead = sourceStream.Read(buffer, 0, buffer.Length);
requestStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
}
response = (FtpWebResponse)request.GetResponse();
response.Close();
}
Run Code Online (Sandbox Code Playgroud)