HttpClient.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Net.Http;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. namespace FastGithub.ReverseProxy
  6. {
  7. /// <summary>
  8. /// YARP的HttpClient
  9. /// </summary>
  10. class HttpClient : HttpMessageInvoker
  11. {
  12. private readonly TlsSniPattern tlsSniPattern;
  13. private readonly bool tlsIgnoreNameMismatch;
  14. /// <summary>
  15. /// YARP的HttpClient
  16. /// </summary>
  17. /// <param name="handler"></param>
  18. /// <param name="tlsSniPattern"></param>
  19. /// <param name="disposeHandler"></param>
  20. public HttpClient(
  21. HttpMessageHandler handler,
  22. TlsSniPattern tlsSniPattern,
  23. bool tlsIgnoreNameMismatch,
  24. bool disposeHandler = false) : base(handler, disposeHandler)
  25. {
  26. this.tlsSniPattern = tlsSniPattern;
  27. this.tlsIgnoreNameMismatch = tlsIgnoreNameMismatch;
  28. }
  29. /// <summary>
  30. /// 发送数据
  31. /// </summary>
  32. /// <param name="request"></param>
  33. /// <param name="cancellationToken"></param>
  34. /// <returns></returns>
  35. public override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
  36. {
  37. request.SetRequestContext(new RequestContext
  38. {
  39. Host = request.RequestUri?.Host,
  40. IsHttps = request.RequestUri?.Scheme == Uri.UriSchemeHttps,
  41. TlsSniPattern = this.tlsSniPattern,
  42. TlsIgnoreNameMismatch = this.tlsIgnoreNameMismatch
  43. });
  44. return base.SendAsync(request, cancellationToken);
  45. }
  46. }
  47. }