Son*_*c42 4 c# xml httpwebrequest
我正在开发一个使用公共XML提要进行计算的C#项目.我最初使用的是XmlDocument.Load,但已迁移到WebClient.DownloadString,因此我可以在请求中包含标头.我正在访问的提要通常会快速响应,但是在WebClient对象的超时时间内,它不时会响应,我得到一个例外.这是我的代码:
XmlDocument xmlDoc = new XmlDocument();
Webclient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
client.Headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
string data = client.DownloadString(/*URL*/);
xmlDoc.LoadXml(data);
Run Code Online (Sandbox Code Playgroud)
我已经读过你不能改变WebClient的超时属性,而有这个问题的人应该使用HttpWebRequest.不幸的是,我不知道如何以一种仍然允许我使用我的标头并将结果发送到xmlDoc的方式来实现它.由于此应用程序的性质,我不关心接收数据需要多长时间; 我可以处理警告用户.
这样做的最佳方法是什么?
Bro*_*ass 16
您可以WebClient为此使用派生类,这只会为每次提取添加所需的超时:
public class TimeoutWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
request.Timeout = 60000; //1 minute timeout
return request;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用TimeoutWebClient 而不是WebClient现在,您将获得所需的超时行为.如果您需要的自定义标头对于每个请求都是相同的,您也可以在这里添加,并且您的调用代码仍然非常干净.
| 归档时间: |
|
| 查看次数: |
3822 次 |
| 最近记录: |