2017-09-22 116 views
0

我想使用HttpClientHandler设置anglesharp.io的超时值。使用HttpClientHandler设置超时

这个问题表明,它是可能的:https://github.com/AngleSharp/AngleSharp/issues/266

我得到页是这样的:

 NetworkCredential proxyCreds = new NetworkCredential(proxy.User, proxy.Pass); 

     WebProxy wProxy = new WebProxy(proxy.Ip + ":" + proxy.Port, false) 
     { 
      UseDefaultCredentials = false, 
      Credentials = proxyCreds, 
     }; 

     HttpClientHandler httpClientHandler = new HttpClientHandler() 
     { 
      Proxy = wProxy, 
      PreAuthenticate = true, 
      UseDefaultCredentials = false 
     }; 

     var config = Configuration.Default.WithRequesters(httpClientHandler); 

     var document = await BrowsingContext.New(config).OpenAsync(address); 

我不能看到可用来设置超时的任何属性。我如何设置超时时间?

+0

您无法在'HttpClientHandler'上设置超时。您需要将'HttpClientHandler'传递给'HttpClient'。检查此 - https://blogs.msdn.microsoft.com/henrikn/2012/08/07/httpclient-httpclienthandler-and-webrequesthandler-explained/ –

+0

Anglesharp正在抽象此过程。我链接的页面说我需要制作IRequester,但我不确定那是什么。我已经直接使用httpclient做了解决方法,但很好奇如何使它在angleharp中工作。 – Guerrilla

+0

那么在这种情况下,你可能必须通过角度冲突的API /文档 –

回答

1

以上评论是正确的。 AngleSharp正在抽象请求者 - 以允许多种类型的请求者,并在需要时提供灵活性。基本的接口是IRequester(注意:没有特意的HTTP--在AngleSharp.Io中,我们还发现,例如,访问本地文件系统的file:// URI的FileRequester)。

我们现在可以实现我们自己的请求者,或者只使用AngleSharp.Io中的HttpClientRequester,构造函数重载接受HttpClient实例。

var client = new HttpClient(); 
client.Timeout = MyCustomTimeout; //Whatever value you want it to be 
var requester = new HttpClientRequester(client); 

现在的问题是你如何使用这个请求者?我们只需要创建一个配置(像往常一样),并使用默认加载扩展方法(像往常一样),但是,这一次我们的定制请求:

// Assumes we do not want to provide custom options for the loaders 
var requesters = new [] { requester }; 
var configuration = Configuration.Default.WithDefaultLoader(requesters: requesters); 

希望这有助于!

+1

非常感谢Florian!我知道必须有一种方法,但我无法弄清楚,所以我使用HttpClient传递的字符串进行了处理。我将来会尝试这种方式。 – Guerrilla

+0

对于像我这样的人,可以在'var configuration = Configuration.Default.WithDefaultLoader(requesters:requesters)'中使用Florian的请求者;'使用而不是请求者 - >新的[] {请求者}。也许很明显,但不适合我。在某种程度上,这是弗洛里安给我在这里的答案:https://github.com/AngleSharp/AngleSharp/issues/367 –

+0

谢谢@samuelguedon - 我已经添加了请求者的声明到我的答案! –