作者:dazhi20 | 来源:互联网 | 2023-05-28 17:00
范围
我为Http Web Request类开发了一个Wrapper ,以更简单的方式执行Get和Posts.这个库已经使用了两年多没有任何问题,但今天,我们遇到了一个奇怪的问题.
有一个网站(加载需要一段时间),显然,它会将字符流保存到HTML前端,因此我们的库"Get"请求会陷入循环.
不同的超时属性
查看Http Web Request参考,我们发现有两种不同的timeout
属性.我们正在使用它们,但它们似乎都没有正常中止.
Read Write Timeout - 读取或设置写入或读取流时的超时(以毫秒为单位).
Timeout - 获取或设置GetResponse和GetRequestStream方法的超时值(以毫秒为单位).
统治它们的一次超时
有没有办法设置一个"操作超时",它将在一些预先配置的时间后强制流/连接处理?
一些代码示例
public class Program
{
public static void Main()
{
string url = "http://anus.io";
Console.WriteLine("Initializing Request State Object");
RequestState myRequestState = new RequestState();
// Creating Http Request
myRequestState.request = (HttpWebRequest)WebRequest.Create(url);
myRequestState.request.Method = "GET";
myRequestState.request.ReadWriteTimeout = 4000;
myRequestState.request.Timeout = 4000;
Console.WriteLine("Begining Async Request");
IAsyncResult ar = myRequestState.request.BeginGetResponse(new AsyncCallback(ResponseCallback), myRequestState);
Console.WriteLine("Waiting for Results");
ar.AsyncWaitHandle.WaitOne();
myRequestState.respOnse= (HttpWebResponse)myRequestState.request.EndGetResponse(ar);
Console.WriteLine("Response status code = {0}", myRequestState.response.StatusCode);
}
public static void ResponseCallback (IAsyncResult asyncResult)
{
Console.WriteLine("Completed");
}
}
这段代码似乎运行正常,但我如何将响应作为字符串读取,因为它经常被传输(如浏览器所示)?
题
处理这样的网站的正确方法是什么?(通过句柄我的意思是能够识别并跳过服务器根本不会停止传输的情况?)