2017-09-22 4 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를 직접적으로 사용하여 해결 방법을 만들었지 만, 그것을 anglesharp에서 작동시키는 방법은 궁금합니다. – Guerrilla

+0

그런 경우에는 anglesharp의 API/문서를 살펴 봐야 할 수도 있습니다 –

답변

1

위의 의견이 맞습니다. AngleSharp는 여러 유형의 요청자를 허용하고 필요할 경우 유연성을 제공하기 위해 요청자를 추상화합니다. 필수 인터페이스는 IRequester입니다 (참고 : AngleSharp에는 의도적으로 HTTP가 없습니다. 예 : file : // URI에 대해 로컬 파일 시스템에 액세스하는 FileRequester).

이제 우리 자신의 리퀘 스터를 구현하거나 AngleSharp의 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

플로리안 대단히 감사합니다! 방법이 있어야한다는 것을 알았지 만 HttpClient에서 문자열을 전달하는 방법을 찾지 못했습니다. 나는 앞으로이 방법을 시도 할 것이다. – Guerrilla

+0

Florian의 리퀘 스터를 'var configuration = Configuration.Default.WithDefaultLoader (requesters : requesters);'에서 사용할 수있는 사용자는 ' 요청자 대신 -> new [] {requester}를 사용하십시오. 어쩌면 많은 사람들에게 명백 할 수 있지만 나에게는 그렇지 않았습니다. 플로리안 (Florian)이 여기에 답을주었습니다. https://github.com/AngleSharp/AngleSharp/issues/367 –

+0

Thanks @ samuelguedon - 답장에 요청자 선언을 추가했습니다! –